从表中选择日期为两列

mHe*_*pMe 9 sql sql-server

我有一张桌子,其中一个字段是日期字段.

我被要求编写一个查询,在A列中返回不同日期(有序)的列表,然后有另一列,比如说日期B,其中B列中的日期是小于A列的最大日期.

    MyDateField

    2017-01-01
    2017-01-01
    2017-01-01
    2017-01-02
    2017-01-02
    2017-01-03
    2017-01-04
    2017-01-05
    2017-01-05
    2017-01-05
Run Code Online (Sandbox Code Playgroud)

需要回答

    2017-01-05      2017-01-04
    2017-01-04      2017-01-03
    2017-01-03      2017-01-02
    2017-01-02      2017-01-01
    2017-01-01      
Run Code Online (Sandbox Code Playgroud)

sag*_*agi 7

如果您使用的是SQL-Server 2012+,那么您可以使用LAG()从表中获取最后一个最大的日期:

SELECT t.date,
       LAG(t.date,1) OVER(ORDER BY t.date) as last_biggest_date
FROM (SELECT DISTINCT s.dateField FROM YourTable s) t
Run Code Online (Sandbox Code Playgroud)