如何选择最新的4个日期

时间:2017-03-30 16:14:08

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

我试图编写一个查询,从表格中为每个人选择最后4个日期。我知道我可以使用max(日期)来选择最近的日期,但是如何从每个人的最新日期开始选择最后4个日期。

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

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

我希望看到的结果是:

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

2 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER函数:

OuterLayout

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

<?xml version="1.0" encoding="utf-8"?>
<com.example.OuterLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<?xml version="1.0" encoding="utf-8"?>
<com.example.InnerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.ChildView
        android:id="@+id/childView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</com.example.OuterLayout>

答案 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