MySQL按多个字段排序
在MySQL中,我有一个表:MySQL按多个字段排序,mysql,Mysql,在MySQL中,我有一个表: id updateTime writeTime ------------------------------ 1 null 2017-04-05 2 null 2017-04-01 3 2017-04-02 2017-04-02 4 2017-04-02 2017-03-31 我想要这个结果: id updateTime writeTime ------------------------
id updateTime writeTime
------------------------------
1 null 2017-04-05
2 null 2017-04-01
3 2017-04-02 2017-04-02
4 2017-04-02 2017-03-31
我想要这个结果:
id updateTime writeTime
------------------------------
1 null 2017-04-05
3 2017-04-02 2017-04-02
4 2017-04-02 2017-03-31
2 null 2017-04-01 `
但当我使用ORDER BY updateTime、writeTime DESC时,通常会得到:
id updateTime writeTime
------------------------------
3 2017-04-02 2017-04-02
4 2017-04-02 2017-03-31
1 null 2017-04-05
2 null 2017-04-01 `
如果我理解正确的话,您需要按更新时间排序。如果为空,则按Writetime排序。如果updateTime相等,请按writeTime排序 您可以为此使用coalesce:
select *
from your_table
order by coalesce(updateTime, writeTime) desc, writeTime desc;
我想您应该在最长的日期前订购:
select
*
from your_table
order by coalesce(GREATEST(updateTime, writeTime),updateTime, writeTime) desc;
所需结果的排序逻辑是什么?对于尚未更新的行,我会将writeTime的值复制到updateTime中。通过这种方式,您可以使用索引通过updateTime进行排序。