SQL Group by聚合时获取int列结果及最新日期对应文本值
SQL查询解决方案
问题修正说明
你现有查询存在两处问题:
- 要得到
col3的分组累加值,应该用SUM(col3)而非MAX(col3) MAX(col4)会按字符串排序取最大值,无法关联到最新日期对应的值
方案1:窗口函数法(适配MySQL 8.0+、PostgreSQL、SQL Server等现代数据库)
用窗口函数标记每个分组内日期最新的行,再关联聚合结果即可:
WITH group_agg AS ( -- 先计算每个col1分组的col3总和 SELECT col1, SUM(col3) AS sum_col3 FROM Table1 GROUP BY col1 ), row_rank AS ( -- 每个col1分组内按col2倒序排序,最新日期的行排名为1 SELECT col1, col2 AS latest_col2, col4, ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2 DESC) AS rn FROM Table1 ) SELECT g.col1, r.latest_col2, g.sum_col3 AS col3, r.col4 FROM group_agg g INNER JOIN row_rank r ON g.col1 = r.col1 WHERE r.rn = 1;
方案2:子查询关联法(兼容低版本MySQL等不支持CTE的数据库)
先取每个分组的最大日期,再关联原表匹配对应col4,同时完成分组聚合:
SELECT t1.col1, t2.max_col2, SUM(t1.col3) AS col3, MAX(CASE WHEN t1.col2 = t2.max_col2 THEN t1.col4 ELSE NULL END) AS col4 FROM Table1 t1 INNER JOIN ( SELECT col1, MAX(col2) AS max_col2 FROM Table1 GROUP BY col1 ) t2 ON t1.col1 = t2.col1 GROUP BY t1.col1, t2.max_col2;
以上两种方案均可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者python_enthusiast
相关产品推荐
相关产品推荐

