基于多个日期值的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_at
和 end_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
表达式是规划器的优化障碍。
我有一个项目 table,项目的列为 start_at
(日期)end_at
(日期)pauzed_at(日期)等。
我想根据日期值对项目进行排序。
排序应该是;
- STARTED projects
- PAUZED projects
- IDLE projects
- ENDED projects
项目在日期介于 start_at
和 end_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
表达式是规划器的优化障碍。