为表中的每个组选择第二个最新记录

时间:2018-11-09 08:18:40

标签: sql sql-server datetime greatest-n-per-group

我在SQL Server数据库的表中具有以下数据。

查询select * from mytable order by UpdatedDate Desc返回:

ID  COL1    UPDATED DATE
37  NULL    2018-06-25 18:20:50.210
37  NULL    2018-06-24 18:22:31.230
38  NULL    2018-04-03 14:16:47.953
38  NULL    2018-04-02 14:17:42.660
38  NULL    2018-04-01 14:17:55.963
44  NULL    2018-06-25 18:13:31.780
44  NULL    2018-06-23 18:13:44.020
44  NULL    2018-06-21 18:13:53.003
44  NULL    2018-06-20 18:14:01.490

什么查询将返回以下结果,即第二次更新的最新记录

37  NULL    2018-06-24 18:22:31.230
38  NULL    2018-04-02 14:17:42.660
44  NULL    2018-06-23 18:13:44.020

1 个答案:

答案 0 :(得分:4)

仅查找行号= 2的记录。对于最新记录,您需要按日期顺序排序。

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY UPDATED_DATE DESC) AS rn
    FROM yourdata
) x
WHERE rn = 2