MySQL ORDER BY CASE日期ASC / DESC

时间:2019-01-15 15:25:08

标签: mysql sql-order-by case

我的桌子上有这些记录:

ID  Win    Date
1   NULL   2019-01-15
2   12     2019-01-10
3   NULL   2019-01-12
4   513    2019-01-14

我希望订单为: 首先按null升序排列的获胜,按日期asc排序;之后按null降序排列的胜利,按日期desc排序

因此顺序为: 3、1、4、2

如何通过案例或其他方式使用订单?

3 个答案:

答案 0 :(得分:1)

您应在此处使用ORDER BY CASE ...

SELECT * FROM ...
ORDER BY
  NOT ISNULL(Win),
  CASE
    WHEN Win IS NULL
    THEN `Date`
    ELSE DATEDIFF('9999-01-01', `Date`)
  END

此日期应为9999-01-01之前的日期。如果您有较晚的日期,请调整此值。

答案 1 :(得分:0)

尝试一下

order by iif(win is null,1,0) DESC, Date DESC

很抱歉,误读了预期的订单,请尝试类似的操作

Order by iif(win is null,1,0) DESC,DateDiff(Day,'1900-01-01',Date) * iif(win is null,1,-1) DESC

想法是通过使用if语句获得一个可以设为负的值

答案 2 :(得分:-1)

可能是外部查询解决了这个问题

SELECT * FROM tablename ORDER BY  Win IS NULL DESC,IF(Win IS NULL,`Date`,DATEDIFF('9999-01-01',`Date`))