让我们说我有一个表,其内容看起来像
ID Name Last Update
============================
1 A 1 JAN 2018
1 A 2 JAN 2018
1 A 3 JAN 2018
2 B 3 JAN 2018
2 B 6 JAN 2018
我想得到结果
ID Name Last Update
============================
1 A 3 JAN 2018
2 B 6 JAN 2018
我该怎么办?
我试图按ID分组,但是如何获取最新的ID?
答案 0 :(得分:1)
虽然@Nik的解决方案可以在MAX(date)
值没有联系(或者选择哪个联系值以及是否产生多个输出行都无关紧要)的情况下工作,但是一种替代方法是按ID
对所有记录进行分组,按date
降序对属于一个组的所有记录进行排序,然后选择每个组的第一行结果。
这可以通过使用SQL标准窗口函数ROW_NUMBER()
来实现,例如:
SELECT ID, NAME, DATE
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY ID
ORDER BY DATE DESC) RN
, ID
, NAME
, DATE
FROM <TABLE_NAME>
)
WHERE RN = 1;
答案 1 :(得分:0)
您可以使用类似的查询来获取所需的结果:
SELECT *
FROM table
WHERE (ID, date) IN (SELECT
ID, MAX(Last Update)
FROM table
GROUP BY ID)