HackerRank | SQL Project Planning

jeonghens·2025년 5월 27일
0

SQL: HackerRank

목록 보기
15/49

HackerRank SQL Project Planning


START_DATE 중 어떤 END_DATE와 겹치는 값은, 어떤 프로젝트 기간에 포함되는 날이다.

이에 WITH 문을 활용하여 어떤 프로젝트의 시작일이 될 수 있는 값(START_TABLE), 마감일이 될 수 있는 값(END_DATE)을 먼저 구했다.

START_TABLE을 기준으로 설명하면, 아래와 같은 기준을 고려했다.
1. 어떤 프로젝트의 시작일이 될 수 있는 날은 END_DATE와 겹치지 않는 START_DATE이다.
2. 1을 만족하는 START_DATE에 대해, ROW_NUMBER()로 오름차순 기준으로 ROW_NUM를 매긴다.
3. START_TABLE, END_TABLE에서 ROW_NUM가 일치하는 값이 한 프로젝트의 시작일과 마감일이 된다.


WITH START_TABLE AS (
    SELECT
        START_DATE,
        ROW_NUMBER() OVER (ORDER BY START_DATE) AS ROW_NUM
    FROM
        PROJECTS
    WHERE
        START_DATE NOT IN (SELECT END_DATE FROM PROJECTS)
), END_TABLE AS (
    SELECT
        END_DATE,
        ROW_NUMBER() OVER (ORDER BY END_DATE) AS ROW_NUM
    FROM
        PROJECTS
    WHERE
        END_DATE NOT IN (SELECT START_DATE FROM PROJECTS)
)

SELECT
    S.START_DATE AS PROJECT_START,
    E.END_DATE AS PROJECT_END
FROM
    START_TABLE AS S
JOIN
    END_TABLE AS E
ON
    S.ROW_NUM = E.ROW_NUM
ORDER BY
    DATEDIFF(END_DATE, START_DATE) ASC,
    START_DATE ASC;
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글