MySQL按2列排序,但有例外

MySQL按2列排序,但有例外,mysql,sql-order-by,Mysql,Sql Order By,按两列排序搜索结果时出现问题 我的表:运输时间以秒为单位存储,约会时间以秒为单位 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

按两列排序搜索结果时出现问题

我的表:运输时间以秒为单位存储,约会时间以秒为单位

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。约会结束时为空

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
我试过很多种箱子,但没能顺利拿到订单。任何帮助都将不胜感激

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

转换为秒以进行比较

 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

你的回答有道理,但我的那一类还是错的。把过境时间放在首位,但约会时间从最长的时间变为最短的时间。将示例数据放在SQLFIDLE上,这样我就可以测试它了。@AdrianP。在您期望的结果中,约会时间在下降。这是错误的吗?约会时间在上升,但如果中转时间较大,则应接管约会时间,例如:从上午7点、上午8点、上午9点开始,但下午1点应该在顶部,因为中转时间6h-约会时间13pm最终小于约会时间7amIn,我已经这样做了:当time_appointment为空时,按案例排序,然后1否则0结束,time_appointment-秒到秒(传输时间)ASC“谢谢你给我指明了正确的方向。你的回答有道理,但我的那一类仍然是错的。把过境时间放在首位,但约会时间从最长的时间变为最短的时间。将示例数据放在SQLFIDLE上,这样我就可以测试它了。@AdrianP。在您期望的结果中,约会时间在下降。这是错误的吗?约会时间在上升,但如果中转时间较大,则应接管约会时间,例如:从上午7点、上午8点、上午9点开始,但下午1点应该在顶部,因为中转时间6h-约会时间13pm最终小于约会时间7amIn,我已经这样做了:当time_appointment为空时,按案例排序,然后1否则0结束,time_appointment-秒到秒(传输时间)ASC“谢谢你给我指出了正确的方向。你想要的结果与样本数据不符。您有一个10221或3852的在途时间,我不知道它来自哪里。在SqlFIDLE数据中,所有转换为第二次在途时间的约会给出的值都大于在途时间您所需的结果与示例数据不匹配。你有一个10221或3852在途时间,我不知道它来自哪里。在SQLFIDLE数据中,所有转换为第二次在途时间的约会给出的值都大于在途时间