我有下表:
key | date | flag
--------------------------
1 now() true
2 now() - 1 hour true
3 now() + 1 hour true
4 now() false
5 now() - 1 hour false
6 now() + 1 hour false
我想要进行以下排序:
flag = false
。必须使用date asc
对这些行进行排序。flag = true
)。但是,这些行必须使用date desc
进行排序。以下查询是否正确?
(
select *
from test
where flag = false
order by date asc
)
union all
(
select *
from test
where flag = true
order by date desc
)
有更好的方法吗? union all
是否会对行进行排序,因此只会连接两个内部查询的输出?
我不知道如何根据条件重复order by
中的列。
更新
可以在这里找到小提琴:http://rextester.com/FFOSS79584
答案 0 :(得分:9)
可以使用CASE
执行条件订单,例如:
select *
from test
order by
flag
, case when flag then date end desc
, case when not flag then date end asc