我需要在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
....
有没有一种直接在MySQL中实现这个的方法?
我是这样解决的:
首先,选择语句包括一个新的布尔值,通过判断日期是过去还是未来来标记:
SELECT DISTINCT *,CASE WHEN startdate < CURDATE() THEN 0
ELSE 1 END AS past_or_future
其次,我进行了两次“排序”操作:首先按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
我首先按日期排序获取了所有未来日期(从小到大),然后按日期排序获取了所有过去日期(从大到小)。