作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要对 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 值,用于标记日期是过去还是 future :
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
通过这种方式,我首先获得了所有按日期排序的即将到来的日期(从低值到高)然后所有过去的日期从日期(从高到低)排序
最佳答案
即使在 ORDER BY
子句中,您仍然可以执行 CASE
语句,
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/
我遇到过 WinAPI 的奇怪行为,在我看来是这样。在我的程序中,我为窗口设置了一个计时器 ::SetTimer(window_handle, timer_id, 10, NULL); 并在我的窗口过
我是一名优秀的程序员,十分优秀!