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

在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 
------------------------------
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进行排序。