我的桌子上有这些记录:
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
如何通过案例或其他方式使用订单?
答案 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`))