728x90
테이블:
Hackers
Submissions
조건:
작업 의 End_Date 가 연속적이면 동일한 프로젝트의 일부입니다.
Samantha는 완료된 서로 다른 프로젝트의 총 수를 찾는 데 관심이 있습니다.
프로젝트를 완료하는 데 걸린 일 수로 나열된 프로젝트의 시작 날짜와 종료 날짜를 오름차순으로 출력하는 쿼리를 작성하십시오.
완료 일수가 동일한 프로젝트가 두 개 이상 있는 경우 프로젝트 시작 날짜를 기준으로 주문하십시오.
select min(start_date), max(end_date)
from
(select
start_date
,end_date
,start_date-row_number()over(order by start_date) as rnk
from
Projects p) tmp
group by rnk
order by max(start_date) - min(start_date), min(start_date);
쿼리 해석
먼저 서브쿼리로 시작 날짜, 끝나는 날짜, 시작날짜 - (각 행의 숫자)
여기서 시작날짜 - (각 행의 숫자)는 rnk라 여겨지며 이 것은 연속된 일 수는 동일한 프로젝트로 여겨지기 때문에
이 값이 동일할 경우에는 하나의 프로젝트라 할 수 있다.
이 것을 서브쿼리로 하여 rnk는 하나의 프로젝트이므로 그룹바이로 묶어준다.
묶어준 것에서 최소 시작일과 최대 끝나는 날은 한 프로젝트의 시작과 끝을 의미하고
그 다음 총 프로젝트 일수가 적은 것 과 시작일이 빠른 순으로 순서를 지정하여 출력해준다.
728x90
'Be Smart > SQL' 카테고리의 다른 글
[Oracle] 고급 쿼리, 계층형 쿼리 (START WITH, CONNECT BY PRIOR, ORDER SIBLINGS BY) (0) | 2022.08.10 |
---|---|
[Oracle] HackerRank 문제 정리 - 5 (0) | 2022.08.04 |
[Oracle] HackerRank 문제 정리 - 1 (0) | 2022.08.01 |
[Oracle] HackerLank-Weather Observation Station 5 문제 (0) | 2022.07.27 |
[ Oracle ] 조건별로 우선 정렬하기 ORDER BY DECODE/CASE (0) | 2022.04.29 |
댓글