하루에 하나씩 공부하기
[해커랭크-Advanced Join] SQL Project Planning (재도전) 본문
- 문제
겹치지 않는 기간 찾기
SQL Project Planning | HackerRank
SQL Project Planning | HackerRank
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.
www.hackerrank.com
- 키포인트
어떻게 해야 END와 START를 묶을 수 있을까?
자기 테이블 두개를 조인하려 했는데 이렇게 하는게 아닌 것 같음
LAG도 고민했으나 이 방법도 아니라 생각(데이터가 예시처럼 연속적으로 있지 않을 수도) << 이건 OVER (ORDER BY ~)에서
설정 가능..
- 쿼리
SELECT START_DATE, MIN(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
GROUP BY를 사용하면 GROUP BY에 있는 절, 혹은 집계함수 사용한 컬럼만 SELECT절에 사용 가능
윈도우함수는 SELECT, ORDER BY 절에서만 사용 가능
WHERE, GROUP BY에서 쓰려면 서브쿼리나 CTE 사용해야 함