我需要在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/