MySQL ORDER BY 2列有异常

标签 mysql sql-order-by

按 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/

相关文章:

mysql - ORDER BY 货币值

mysql - 在使用 GROUP BY 之前对数据进行排序?

MySQL:为大约100,000行的InnoDB表中的列建立索引需要时间?

mysql - 如何使用 JOINS 代替子查询

mysql - 从 SQL 结果中删除重复项并显示其他列

mysql - 今年过去一段时间的月平均值

其他列的 SQL ORDER BY 行为?

mysql - 是否可以按交替顺序输出两个子查询的联合结果?

mysql - 最新Group By MYSQL+链接表

mysql - 在 Order By 中使用 MATH 对性能有好处吗?