在同一列上按多个案例排序行

时间:2016-07-22 11:27:41

标签: mysql sql

我有这个结构

        |   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

1 个答案:

答案 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但未来的价值是第一位的。其他两个键处理每个组内的排序。

相关问题