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;