Getting most recent date values where other column values change
本问题已经有最佳答案,请猛点这里访问。
我有一张表如下:
1 2 3 4 5 6 7 8 9 | id VALUE DATE --------------- a, test, 01-01-15 a, test, 01-02-15 a, test, 01-03-15 a, test1, 01-04-15 a, test1, 01-05-15 b, test, 01-01-15 b, test, 01-02-15 |
我需要编写一个查询,以便能够获取a&的最新映射。b
例如,我希望我的结果如下:
1 2 | a, test1, 01-05-15 b, test, 01-02-15 |
我似乎无法理解如何实现这一目标
1 | SELECT MAX(DATE) |
仅返回最新的日期值
并且
简单
1 2 3 | SELECT DISTINCT ON (id) * FROM tbl ORDER BY id, DATE DESC NULLS LAST; |
详细说明:
- 选择每个GROUP BY组中的第一行?
快速
对于每
- 优化GROUP BY查询以检索每个用户的最新记录
根据您使用的SQL版本,您可能有一个名为
1 2 3 4 5 6 7 8 | WITH x AS (SELECT id, VALUE, DATE , ROW_NUMBER() OVER (PARTITION BY id ORDER BY DATE DESC) AS RowNum FROM TABLE ) SELECT id, VALUE, DATE FROM x WHERE RowNum = 1 |
以上内容适用于SQL Server以及支持CTE和窗口函数的任何其他内容。 你也可以把它写成派生表,如下所示:
SELECT id,value,date
从
(SELECT id,value,date
,ROW_NUMBER()OVER(PAR BY BY BY ORDER BY date DESC)AS RowNum
从表
)AS x
RowNum = 1
如果您的数据库支持
1 2 3 4 5 6 7 | SELECT id,VALUE,DATE FROM ( SELECT ROW_NUMBER() OVER(partition BY VALUE ORDER BY DATE DESC) AS RN, id,VALUE,DATE FROM yourtable ) A WHERE RN=1 |
另一种方法是将结果加回到表中。
1 2 3 4 5 6 7 8 9 10 | SELECT A.id, A.value, A.date FROM yourtable A INNER JOIN (SELECT MAX(DATE) AS DATE, VALUE FROM yourtable GROUP BY VALUE) B ON A.date = b.date AND A.value = B.value |