我有这个结构
| start_at
----------------------
record1 | 2016-01-20
record2 | 2016-01-15
record3 | 2016-01-22
record4 | 2016-01-10
让s say that the current date it
s 2016-01-19
我想首先获取start_at大于当前日期的记录,并通过start_at ASC对它们进行排序。
然后我想获取start_at小于当前日期的记录,并通过start_at DESC对它们进行排序。
所以结果应该是这样的:
| start_at
----------------------
record1 | 2016-01-20
record3 | 2016-01-22
record2 | 2016-01-15
record4 | 2016-01-10
我该怎么做?
我尝试这样做,但没有成功:
ORDER BY start_at >= NOW() ASC, start_at < NOW() DESC
答案 0 :(得分:4)
你很近,有order by
的多个键:
ORDER BY (start_at >= NOW()) desc,
(case when start_at >= NOW() then start_at end) asc,
(case when start_at < NOW() then start_at end) desc
第一个条件是将未来日期放在第一位。怎么样?表达式start_at >= NOW()
返回一个布尔值。真正的价值是&#34; 1&#34;和假&#34; 0&#34;,所以desc
但未来的价值是第一位的。其他两个键处理每个组内的排序。