按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.约会结束时为NULL

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 - MySQL ORDER BY 2栏异常(exception),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42493069/

10-09 00:55