PostgreSQL-条件排序

PostgreSQL-条件排序,sql,postgresql,sorting,sql-order-by,Sql,Postgresql,Sorting,Sql Order By,我有下表: 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 我需要以下排序: 首先,所有带有标志=false的行。这些行

我有下表:

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
我需要以下排序:

  • 首先,所有带有
    标志=false的行。这些行必须按
    日期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
是否会保持行的排序,从而将两个内部查询的输出连接起来

我不知道如何根据条件重复排序依据中的列

更新


可以在这里找到Fiddle:

条件顺序可以通过
CASE
执行,如下所示:

select *
    from test
order by 
    flag
  , case when flag then date end desc
  , case when not flag then date end asc

有条件的排序是通过
CASE
smth完成的,就像
order by flag,CASE when flag然后date end desc,CASE when not flag然后date end asc