在即将到来的日期之后按日期订购过去的日期

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)

  • GETDATE()是MsSQL,而不是MySQL.您可以使用CURDATE()代替 (2认同)