通过多个分组获取 N 个最新行

鉴于此数据

用户身份 完成日期
1 2016 年 7 月 20 日
1 2016 年 7 月 21 日
2 2016 年 7 月 20 日
2 2016 年 7 月 21 日
2 2016 年 7 月 22 日
;with CTE as
(SELECT *, 
        ROW_NUMBER() OVER (PARTITION BY User_ID 
                           ORDER BY Completion_Date DESC) Row_Num
FROM    Data)
SELECT * FORM CTE WHERE Row_Num <= n

使用 n = 1,你将获得每个 user_id 最近一行:

用户身份 完成日期 ROW_NUM
1 2016 年 7 月 21 日 1
2 2016 年 7 月 22 日 1