技术问询:如何获取各日期对应Count列最大值的唯一数据行
需求说明
需要从给定数据表中,提取每个date对应的count列最大值所在的完整数据行。
原始数据表:
| id | date | count | |----|------------|-------| | 1 | 2022-01-01 | 2 | | 2 | 2022-01-01 | 3 | | 3 | 2022-01-02 | 4 | | 4 | 2022-01-02 | 7 |
期望结果:
| id | date | count | |----|------------|-------| | 2 | 2022-01-01 | 3 | | 4 | 2022-01-02 | 7 |
方法1:使用窗口函数(推荐,简洁高效)
利用ROW_NUMBER()窗口函数按date分组,对count降序排序后取每组第一行:
SELECT id, date, count FROM ( SELECT id, date, count, ROW_NUMBER() OVER (PARTITION BY date ORDER BY count DESC) AS rn FROM your_table_name ) t WHERE rn = 1;
注:若同一日期存在多个相同的最大count值,ROW_NUMBER()会随机选取一行;如需保留所有最大值行,可替换为RANK()或DENSE_RANK()。
方法2:子查询关联
先按日期分组求出每个日期的最大count,再关联原表获取对应行:
SELECT t1.id, t1.date, t1.count FROM your_table_name t1 JOIN ( SELECT date, MAX(count) AS max_count FROM your_table_name GROUP BY date ) t2 ON t1.date = t2.date AND t1.count = t2.max_count;
注:此方法会保留同一日期下所有count等于最大值的行。
内容的提问来源于stack exchange,提问作者zaknafein
相关产品推荐
相关产品推荐

