medium, Advanced Join
https://www.hackerrank.com/challenges/sql-projects/problem?isFullScreen=true
Start_Date 중 End_Date에는 없는 Start_Date는 각 연속적이지 않고 개별적으로 시작하는 프로젝트의 시작날짜를 의미한다.
End_Date 중 Start_Date에는 없는 End_Date는 각 연속적이지 않고 개별적으로 시작하는 프로젝트의 종료날짜를 의미한다.
따라서, 이 조건에 따라 derived table을 만들고 두 테이블을 조인한다. 이후 start_date가 end_date보다 큰 데이터는 제외시킨다.
여기까지 하면 start_date가 중복으로 여러 개 겹친다. 이를 묶어주기 위해 start_date로 그룹화하고 end_date는 출력하기 위해 MIN
으로 묶어준다.
SELECT start_date,
MIN(end_date) end_date
FROM
(SELECT start_date
FROM projects
WHERE start_date NOT IN(SELECT end_date FROM projects)) a,
(SELECT end_date
FROM projects
WHERE end_date NOT IN(SELECT start_date FROM projects)) b
WHERE start_date < end_date
GROUP BY start_date
ORDER BY DATEDIFF(MIN(end_date), start_date), start_date