MySQL - 按条件排序两列

时间:2017-09-14 00:27:25

标签: mysql sql-order-by

我在MySQL表中有这些数据。我需要按条件订购结果:

  • 如果effective_toNULL,则首先显示order by effective_from DESC
  • 如果effective_toNOT NULLorder by effective_to DESC

我的数据

name            effective_from      effective_to
person 01       1999-04-01          1999-05-31
person 02       1999-04-01          2000-07-06
person 03       1999-04-01          2000-09-25
person 04       1999-04-01          2000-09-25
person 07       1999-04-01          2000-09-25
person 05       2013-04-29          NULL
person 08       2010-06-17          2012-09-27
person 09       2010-12-02          2012-09-27
person 10       2017-02-10          NULL
person 11       2017-02-10          NULL
person 12       1999-04-01          2000-07-06
person 13       2011-04-28          2015-10-06
person 05       2013-04-29          2017-02-15
person 06       2015-09-22          2017-02-15
person 06       2015-09-22          2017-02-10

我需要这个结果顺序

name                effective_from  effective_to                                                
person 11       2017-02-10          NULL
person 10       2017-02-10          NULL
person 05       2013-04-29          NULL
person 06       2015-09-22          2017-02-15
person 05       2013-04-29          2017-02-15
person 06       2015-09-22          2017-02-10
person 13       2011-04-28          2015-10-06
person 09       2010-12-02          2012-09-27
person 08       2010-06-17          2012-09-27
person 07       1999-04-01          2000-09-25
person 03       1999-04-01          2000-09-25
person 04       1999-04-01          2000-09-25
person 12       1999-04-01          2000-07-06
person 02       1999-04-01          2000-07-06
person 01       1999-04-01          1999-05-31

我是怎么做到的?

2 个答案:

答案 0 :(得分:1)

这应该这样做

...
ORDER BY
ISNULL(effective_from) DESC,
IF(ISNULL(effective_to ) = 1, effective_from  , effective_to) DESC

答案 1 :(得分:1)

(代表OP发布)

我这样解决了我的问题:

ORDER BY `effective_to` IS NOT NULL ASC, `effective_to` DESC,
    `effective_to` IS NULL, `effective_from` DESC;