如何 select 最近 4 个日期

How to select latest 4 dates

我正在尝试为每个人编写查询 select 最近 4 个日期 table。我知道我可以使用 max(date) 来 select 最近的日期,但是如何 select 最后 4 个日期从每个人的最近日期开始。

我尝试的是(如下所示)但这只给我最近的事件日期。

select user, max(date)  
from users  
group by user

我希望看到的结果是:

用户 |日期
约翰 | 2017 年 3 月 30 日
约翰 | 2017 年 3 月 27 日
约翰 | 21/02/2017
约翰 | 2017 年 4 月 1 日
安迪 | 29/03/2017
安迪 | 2017 年 2 月 27 日
安迪 | 21/02/2017
安迪 | 2017 年 1 月 1 日

在黑暗中拍摄:

select t.person, o.date
from table t
outer apply (
select top 4 t2.date 
from table2 t2
where t.personID = t2.personID
Order by t2.date desc
) o

您可以使用 ROW_NUMBER 函数:

 WITH cte
 AS
 (
 SELECT user, date, ROW_NUMBER () OVER (PARTITION BY user ORDER BY date DESC) row
 FROM users
 )

 SELECT user, date
 FROM cte
 WHERE row <= 4

但是如果用户可以有重复的日期,你最好使用 DENSE_RANK 并在 SELECT 之后添加一个 DISTINCT:

DENSE_RANK () OVER (PARTITION BY user ORDER BY date DESC) row