SQL
SQL Project Planning
sawo11
2025. 5. 6. 02:00
문제 풀이 링크: https://www.hackerrank.com/challenges/sql-projects/problem?isFullScreen=true
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
🔧 문제 요약
- Projects(Task_ID, Start_Date, End_Date) 테이블
- 각 Task의 기간은 항상 1일 (즉, DATEDIFF(End_Date, Start_Date) = 1)
- End_Date가 다음 Task의 Start_Date와 이어지면 같은 프로젝트
- 이렇게 이어지는 작업들을 하나의 프로젝트로 보고, 각 프로젝트의 시작일, 종료일을 구하기
- 정렬 기준
- 프로젝트가 걸린 기간(duration) 기준 오름차순
- 같다면 시작일 기준 오름차순
WITH project_grouped AS (
SELECT
Task_ID,
Start_Date,
End_Date,
DATE_SUB(Start_Date, INTERVAL ROW_NUMBER() OVER (ORDER BY Start_Date) DAY) AS grp
FROM Projects
),
projects AS (
SELECT
MIN(Start_Date) AS project_start,
MAX(End_Date) AS project_end,
DATEDIFF(MAX(End_Date), MIN(Start_Date)) + 1 AS duration
FROM project_grouped
GROUP BY grp
)
SELECT
project_start,
project_end
FROM projects
ORDER BY
duration,
project_start;