按 2 列对搜索结果进行排序的问题。
我的表:中转时间以秒为单位存储,约会以时间为单位
id transit_time appointment
----------------------------
2 3845 09:00:00
11 22053 13:00:00
10 4852 08:00:00
11 5985 NULL
13 7221 12:45:00
14 3812 NULL
17 4256 NULL
18 5663 NULL
19 4725 NULL
我想选择按以下顺序排列记录:
1. appointment IS NULL at the end
2. 按预约时间 ASC
<强>3。如果运输时间大于预约时间,则该记录应位于点 2 的排序之上
例如正确的顺序应该是:
id transit_time appointment
----------------------------
11 22053 13:00:00
13 10221 12:45:00
10 3852 08:00:00
2 4245 09:00:00
11 5985 NULL
18 5663 NULL
19 4725 NULL
17 4256 NULL
14 3812 NULL
我已经用 CASE 尝试了很多种类,但没有运气得到那个订单。任何帮助将不胜感激。
SELECT * FROM table WHERE ...
ORDER BY (CASE WHEN appointment IS NULL THEN 1 ELSE 0 END) asc,
transit_time desc
最佳答案
转换为秒进行比较
ORDER BY CASE WHEN time_appointment IS NULL THEN 1 ELSE 0 END ,
transit_time DESC,
CASE WHEN transit_time > TIME_TO_SEC(time_appointment) THEN transit_time ELSE NULL END
关于MySQL ORDER BY 2列有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42493069/