基于多个日期值的postgres排序

postgres sorting based on multiple date value's

我有一个项目 table,项目的列为 start_at(日期)end_at(日期)pauzed_at(日期)等。 我想根据日期值对项目进行排序。

排序应该是;

- STARTED projects
- PAUZED projects
- IDLE projects 
- ENDED projects

项目在日期介于 start_atend_at 之间时启动。

未到 start_at 日期时项目处于空闲状态。

项目在到达 end_at 日期时结束。

项目在设置 paused_at 等时暂停

如何根据项目状态对 table 进行排序?

状态可以用case表达式表示:

SELECT *
FROM   projects
ORDER BY CASE WHEN paused_at IS NOT NULL THEN 2 -- paused
              WHEN ended_at() < NOW() THEN 4 -- ended
              WHEN started_at() > NOW() THEN 3 -- idle
              ELSE 1 -- started
         END ASC

false 之前的订单 true:

order by
    now() >= start_at and now() < end_at desc,
    paused_at is null,
    now() < start_at desc,
    now() >= end_at desc

case 表达式是规划器的优化障碍。