【发布时间】:2012-09-11 07:58:37
【问题描述】:
我需要对 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 语句包含一个新的布尔值,用于标记日期是过去还是未来:
SELECT DISTINCT *,CASE WHEN startdate < CURDATE() THEN 0
ELSE 1 END AS 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
通过这种方式,我首先获得了按日期排序的所有即将到来的日期(从低值到高值),然后是从该日期排序的所有过去日期(从高到低)
【问题讨论】:
标签: mysql sql date sql-order-by