如何获取各分组最大值记录并从重复查询中提取最大日期去重
SQL分组取最大日期问题解答
问题1:如何从重复查询结果中获取最大日期并去除重复数据?
问题2:如何获取每个分组集合中包含最大值的记录?
现有数据
| Product | Date out |
|---|---|
| Book 1 | 01-01-2019 |
| Book 2 | 05-03-2021 |
| Book 3 | 06-05-2021 |
| Book 1 | 01-02-2019 |
| Book 1 | 30-11-2021 |
| Book 1 | 01-12-2022 |
你之前写的SQL语句缺少GROUP BY子句,无法正确分组计算最大值,正确写法如下:
SELECT Product, MAX(`Date out`) AS `Latest Date out` FROM products GROUP BY Product;
执行后就能得到你期望的结果:
| Product | Latest Date out |
|---|---|
| Book 1 | 01-12-2022 |
| Book 2 | 05-03-2021 |
| Book 3 | 06-05-2021 |
如果需要获取每个分组里包含最大日期的完整记录(比如表中还有其他字段要返回),可以用窗口函数实现:
SELECT Product, `Date out`, other_column FROM ( SELECT Product, `Date out`, other_column, ROW_NUMBER() OVER (PARTITION BY Product ORDER BY `Date out` DESC) AS rn FROM products ) t WHERE rn = 1;
这个方法会给每个Product分组的记录按日期倒序排序,取排序后第一条(也就是日期最大的那条),适合需要返回多字段的场景。
内容的提问来源于stack exchange,提问作者Alicia Morales
相关产品推荐
相关产品推荐

