我需要在MySql数据库中的表上执行查询,其中结果行的顺序将如下所示:

如果今天是2012年10月9日:

...
11/09/12
12/09/12
15/09/12
08/09/12  <--here start the past dates
07/09/12
05/09/12
....

有没有一种方法可以直接在MySQL中实现呢?

我已经通过以下方式解决:

首先,select语句包含一个新的 bool 值,该 bool 值通过以下方式标记日期是过去还是将来:
SELECT DISTINCT *,CASE  WHEN startdate < CURDATE() THEN 0
                ELSE 1 END AS past_or_future

其次,我完成了一个双重的“排序依据”:首先在past_or_future bool 值上,然后在日期上,条件是这样的:
ORDER BY past_or_future  DESC , CASE WHEN past_or_future  = 1 THEN startdate END ASC, CASE WHEN past = 0 THEN startdate END DESC

这样,我首先获取了按日期排序的所有即将到来的日期(从较低的值到较高的值),然后是从日期排序的所有过去的日期(从较高的值到较低的位置)

最佳答案

即使在CASE子句中,您仍然可以执行ORDER BY语句,

SELECT *
FROM tableName
ORDER BY (CASE WHEN DATE(dateColumn) < DATE(GETDATE())
              THEN 1
              ELSE 0
         END) DESC, dateColumn ASC

关于mysql - ORDER BY日期,过去日期之后的过去日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12365246/

10-11 22:11
查看更多