SQL 服务器根据当前日期使用 Order By 对数据进行排序
SQL Server sort data with Order By according to current date
我有一个tableWebOrder
下面是 table 的简化版本(我省略了这个 post 不需要的大部分列)
+-------------------+----------------+
|Field |Type |
+-------------------+----------------+
|WebOrderID |Int |
|DueDate |Date |
|Customer |nvarchar(50) |
+-------------------+----------------+
我想按截止日期排序,这很容易
SELECT * FROM WebOrder ORDER BY DueDate
不过,我想更进一步地进行排序,将当前日期到期的 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 |
+-------------------+----------------+-----------------+
这个 post 与我想要实现的 非常相似,但是我不确定如何在 sql 服务器中实现相同的目标。
这是我的第一个 post 所以让我知道如何改进我的问题和 post.
考虑条件排序:
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
.
对子集进行排序
我有一个tableWebOrder
下面是 table 的简化版本(我省略了这个 post 不需要的大部分列)
+-------------------+----------------+ |Field |Type | +-------------------+----------------+ |WebOrderID |Int | |DueDate |Date | |Customer |nvarchar(50) | +-------------------+----------------+
我想按截止日期排序,这很容易
SELECT * FROM WebOrder ORDER BY DueDate
不过,我想更进一步地进行排序,将当前日期到期的 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 | +-------------------+----------------+-----------------+
这个 post 与我想要实现的
考虑条件排序:
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
.