Ale*_*t83 8 mysql sql date sql-order-by
我需要对MySql数据库中的表执行查询,其中结果行的顺序如下:
如果今天是10/09/12:
...
11/09/12
12/09/12
15/09/12
08/09/12 <--here start the past dates
07/09/12
05/09/12
....
Run Code Online (Sandbox Code Playgroud)
有没有办法直接在MySQL中实现这一点?
我已经用这种方式解决了:
首先,select语句包含一个新的布尔值,通过以下方式标记日期是过去还是将来:
SELECT DISTINCT *,CASE WHEN startdate < CURDATE() THEN 0
ELSE 1 END AS past_or_future
Run Code Online (Sandbox Code Playgroud)
其次,我做了一个双'Order by':首先在past_or_future布尔然后在日期,有条件,如下所示:
ORDER BY past_or_future DESC , CASE WHEN past_or_future = 1 THEN startdate END ASC, CASE WHEN past = 0 THEN startdate END DESC
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我首先获得了按日期排序的所有即将到来的日期(从较低的值到较高的值),然后是从日期(从较高到较低)订购的所有过去日期
Joh*_*Woo 12
你CASE
甚至可以在ORDER BY
条款中做声明,
SELECT *
FROM tableName
ORDER BY (CASE WHEN DATE(dateColumn) < DATE(GETDATE())
THEN 1
ELSE 0
END) DESC, dateColumn ASC
Run Code Online (Sandbox Code Playgroud)