SQL & DB/HackerRank SQL Problem

[HackerRank SQL] SQL Project Planning

YSY^ 2021. 3. 1. 21:19

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

You are given a table, Projects, containing three columns: Task_ID, Start_Date and End_Date. It is guaranteed that the difference between the End_Date and the Start_Date is equal to 1 day for each row in the table.

If the End_Date of the tasks are consecutive, then they are part of the same project. Samantha is interested in finding the total number of different projects completed.

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. If there is more than one project that have the same number of completion days, then order by the start date of the project.

Sample Input

Sample Output

2015-10-28 2015-10-29

2015-10-30 2015-10-31

2015-10-13 2015-10-15

2015-10-01 2015-10-04


Explanation

The example describes following four projects:

  • Project 1: Tasks 1, 2 and 3 are completed on consecutive days, so these are part of the project. Thus start date of project is 2015-10-01 and end date is 2015-10-04, so it took 3 days to complete the project.
  • Project 2: Tasks 4 and 5 are completed on consecutive days, so these are part of the project. Thus, the start date of project is 2015-10-13 and end date is 2015-10-15, so it took 2 days to complete the project.
  • Project 3: Only task 6 is part of the project. Thus, the start date of project is 2015-10-28 and end date is 2015-10-29, so it took 1 day to complete the project.
  • Project 4: Only task 7 is part of the project. Thus, the start date of project is 2015-10-30 and end date is 2015-10-31, so it took 1 day to complete the project.

Answer

SELECT Start_Date, MIN(End_Date) FROM
(SELECT Start_Date FROM Projects WHERE Start_Date NOT IN (SELECT End_Date FROM Projects)) AS s,
(SELECT End_Date FROM Projects WHERE End_Date NOT IN (SELECT Start_Date FROM Projects)) AS e
WHERE Start_Date < End_Date
GROUP BY Start_Date
ORDER BY DATEDIFF(MIN(End_Date), Start_Date), Start_Date;

Start_Date가 만약 End_Date에 없다면, 연속된것이 아니기 때문에 다른 프로젝트로 구분된다.

역시 End_Date가 Start_Date에 없다면 연속된 것이 아니기 때문에 다른 프로젝트로 구분된다.

위에 해당되는 Start_Date와 End_Date를 뽑아내고 Start_Date와 End_Date의 차이가 적은 순서부터 출력한다.

 

Result

 

728x90
반응형

'SQL & DB > HackerRank SQL Problem' 카테고리의 다른 글

[HackerRank SQL] Symmetric Pairs  (0) 2021.03.01
[HackerRank SQL] Placements  (0) 2021.03.01
[HackerRank SQL] Contest Leaderboard  (0) 2021.03.01
[HackerRank SQL] Challenges  (0) 2021.03.01
[HackerRank SQL] Ollivander's Inventory  (0) 2021.03.01