SQL Server根据当前日期对数据进行排序

时间:2020-06-24 21:55:20

标签: sql-server date select sql-order-by sql-server-2019

我有一张桌子WebOrder
下面是表格的简化版本(我省略了本文不需要的大多数列)

+-------------------+----------------+
|Field              |Type            |
+-------------------+----------------+
|WebOrderID         |Int             |
|DueDate            |Date            |
|Customer           |nvarchar(50)    |
+-------------------+----------------+

我想按到期日排序,这很容易

SELECT * FROM WebOrder ORDER BY DueDate

但是,我想进一步进行排序,将在当前日期到期的WebOrders显示在顶部,然后将在较晚日期到期的WebOrders依次显示,最后将在之后到期的WebOrders依次过去截止日期。
下面是输出示例的示例

+-------------------+----------------+-----------------+
|WebOrderID         |DueDate         |Customer         |
+-------------------+----------------+-----------------+
|23                 |2020-06-24      |Phillip Fry      |
|2                  |2020-06-24      |Karen Clay       |
|35                 |2020-06-26      |George Sun       |
|64                 |2020-06-28      |Austin Powers    |
|1                  |2020-06-01      |Wu Lang          |
|12                 |2020-06-05      |Jessica Myers    |
|6                  |2020-06-07      |Sarah Red        |
+-------------------+----------------+-----------------+

这篇文章与我想要实现的内容非常相似,Sorting data according to current date,但是我不确定如何在sql server中实现相同的功能。 这是我的第一篇文章,所以让我知道如何改善我的问题和文章。

1 个答案:

答案 0 :(得分:1)

考虑条件排序:

order by
    case 
        when dueDate = cast(getdate() as date) then 0
        when dueDate > cast(getdate() as date) then 1
        else 2
    end,
    dueDate

order by子句中的第一个表达式优先于当前日期记录,然后优先于将来的记录。第二个排序标准然后按dueDate对子集进行排序。