【问题标题】: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 语句来获得一个可以否定的值