https://www.hackerrank.com/challenges/sql-projects/problem
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
1. 설명:
-하기와 같이 TASK_ID, Start_DATE, End_Date 가 있는 Projects 라는 테이블이 있다.
-End Date 가 연속적이라면 같은 프로젝트
: 예를 들어 하기 Sample Output 의 Task_ID 1, 2, 3 은 같은 프로젝트, 이 때 최종 End_Date 는 10/4일 Start_Date 는 10/1 이 됨, 그러므로 소요된 날짜도 3일이다.
: 마찬가지로 Task_ID 는 4, 5도 같은 프로젝트, 이 때 소요된 날짜는 2일
2. 문제:
-각각 개별 프로젝트들이 완료되기까지 소요된 날짜를 구하라
1) 최종 결과에는 프로젝트별 Start Date 와 End Date 를 구하되, 완료되기까지 소요된 날짜 순으로 오름차순 정렬
2) 같은 소요기간이 걸린 프로젝트의 경우, 해당 프로젝트의 Start Date 로 정렬하라
Sample Input
처음 스타트 하기까지 너무 아이디어가 안나와서 Discussion 을 참고 하였다...........
3. 풀이
- ROW_NUMBER() OVER 함수를 알아야 함....
: 말 그대로 일련 번호를 부여 하는 함수이되, 무엇을 가지고 정렬해서 일련 번호를 부여할지 정할 수 있는 듯..
: 이 예시에서는 Start_Date 칼럼
- 이 함수를 가지고 같은 프로젝트임을 명시해줄 수 있는 칼럼을 하나 만들어야 함
The syntax for ROW_NUMBER function in SQL is as follows
ROW_NUMBER() OVER (
[PARTITION BY expr1, expr2,...]
ORDER BY expr1 [ASC | DESC], expr2,...
)
1) 첫번째 방법
SELECT MIN(Start_Date), MAX(End_Date)
FROM
(SELECT
Start_Date,
End_Date,
ROW_NUMBER() OVER (ORDER BY Start_date),
End_Date - ROW_NUMBER() OVER (ORDER BY Start_date) AS Same_Project // 같은 프로젝트를 명시하는 칼럼을 하나 만든다
FROM
Projects) P
GROUP BY Same_Project // 같은 프로젝트별로 GROUP BY 를 한다
ORDER BY MAX(End_Date)-MIN(Start_Date), MIN(Start_Date) // End_Date 의 최대에서 Start_Date 의 최소를 빼면 소요 기간, 이 소요기간 별로 오름차순
2) 두번째 방법
WITH
partitioned AS
(
SELECT
*
, DATEDIFF(Start_Date, '2001-01-01') - ROW_NUMBER() OVER (ORDER BY start_Date) AS PartID
FROM
Projects
)
SELECT
MIN(Start_Date) AS StartDate
, MAX(End_date) AS EndDate
FROM
partitioned
GROUP BY
PartID
ORDER BY
DATEDIFF(MAX(End_Date), MIN(Start_Date))
'데이터관련공부 > SQL' 카테고리의 다른 글
[HackerRank] SQL - Binary Tree Nodes (0) | 2022.10.10 |
---|---|
[HackerRank] SQL - Occupations (0) | 2022.10.09 |
[HackerRank] SQL - The PADS (0) | 2022.10.08 |
[HackerRank] SQL - Symmetric Pairs (1) | 2022.09.30 |
[SQL 첫걸음] 7장 (UNION, 결합(JOIN), 관계형모델) (0) | 2022.07.28 |