【问题标题】:MySQL ORDER BY CASE Date ASC/DESCMySQL ORDER BY CASE 日期 ASC/DESC
【发布时间】:2019-06-09 15:27:06
【问题描述】:

我的桌子上有这些记录:

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

我希望订单是: 先为空的获胜,按日期升序排序,后不为空的获胜,按日期降序排序

所以顺序是:3, 1, 4, 2

我怎样才能使用逐案排序或任何其他方式来实现这一点?

【问题讨论】:

    标签: mysql sql-order-by case


    【解决方案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 之前的日期。如果您有较晚的日期,请调整此值。

    【讨论】:

      【解决方案2】:

      试试这个

      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 语句来获得一个可以否定的值

      【讨论】:

        猜你喜欢
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        • 2020-03-09
        • 2011-02-22
        相关资源
        最近更新 更多