Problem
If the End_Date of the tasks are consecutive, then they are part of the same project. Samantha is interested in finding the total number of different projects completed.
Write a query to output the start and end dates of projects listed by the number of days it took to complete the project in ascending order. If there is more than one project that have the same number of completion days, then order by the start date of the project.
-> 연속되는 날짜는 같은 프로젝트로 여긴다. (연속되는 날짜는 프로젝트 끝나는 시간과 시작하는 시간이 같을 경우)
프로젝트의 시작 시간과 끝나는 시간을 출력한다. 출력할 때는 프로젝트 기간이 짧은 순으로, 기간이 동일하면 프로젝트 시작 시간이 빠른 순으로 정렬해서 출력한다.
Answer
select start_date,min(end_date)
from (select start_date from projects
where start_date not in (select end_date from projects)) a
inner join
(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 min(end_date) - start_date , start_date;
1. Table a는 시작 시간이 끝나는 시간에 포함되지 않은 프로젝트를 갖고 있다. 그러므로 2,3,5 프로젝트를 제외한 시작 시간을 갖고 있다.
2. Table b는 끝나는 시간이 시작 시간에 포함되지 않은 프로젝트를 갖고 있다. 그러므로 1,2,4 프로젝트를 제외한 끝나는 시간을 갖고 있다.
3. a와 b를 join을 시켜줘서 a와 b의 모든 조합을 생성해준다. 여기서 당연히 시작 시간이 끝나는 시간보다 작은 값을 조건(where)에 설정한다.
4. 시작 시간을 그룹화해주고 , 그룹화 한 시간 중에서 가장 작은 끝나는 시간과 시작시간이 차가 짧은 순(프로젝트 기간), 시작시간이 짧은 순으로 정렬시켜준다.
'Language > SQL' 카테고리의 다른 글
[HackerRank][SQL][JOIN] Basic Join, Top Competitors - 컴도리돌이 (0) | 2022.05.28 |
---|---|
[HackerRank][SQL][JOIN] The Report - 컴도리돌이 (0) | 2022.05.28 |
[HackerRank][SQL][JOIN] Average Population of Each Continent - 컴도리돌이 (0) | 2022.05.28 |
[HackerRank][SQL][JOIN] African Cities- 컴도리돌이 (0) | 2022.05.28 |
[HackerRank][SQL][Aggregation] Weather Observation Station 21 - 컴도리돌이 (0) | 2022.05.27 |