2017-09-14 6 views
2

start_at (날짜) end_at (날짜) pauzed_at (날짜) 등프로젝트가 포함 된 프로젝트 테이블이 하나 있습니다. 날짜 값을 기준으로 프로젝트를 주문하고 싶습니다.postgres 다중 날짜 값을 기준으로 정렬

정렬해야합니다. 날짜가 start_at & end_at 사이에있을 때

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

프로젝트가 시작됩니다.

start_at 날짜에 도달하지 않은 경우 프로젝트가 유휴 상태입니다.

end_at 날짜에 도달하면 프로젝트가 종료됩니다. paused_at이 설정되어있는 경우

프로젝트는 일시 정지 등 등

내가 프로젝트의 상태에 따라이 표를 정렬 할 수 있습니까?

답변

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

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 식은 플래너 최적화 장벽이다.