我有一个项目表,其中的项目包含start_at
列(日期)end_at
(日期)pauzed_at(日期)等。
我想根据日期值来订购项目。
排序应该是;
- STARTED projects
- PAUZED projects
- IDLE projects
- ENDED projects
项目在日期介于start_at
&之间时启动end_at
。
项目在未达到start_at日期时处于空闲状态。
项目在达到end_at日期时结束。
当paused_at设置等等时,项目暂停。
如何根据项目的状态对此表进行排序?
答案 0 :(得分:1)
状态可以用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
答案 1 :(得分:1)
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
表达式是规划师的优化障碍。