본문 바로가기

DB

SQL 문제풀이 4)

오늘도 SQL 문제풀이에 대한 글을 포스팅 하겠습니다.

Medium 난이도로 상승해서 풀어보니 풀 수 있는 문제가 존재하지 않네요.

계속 풀다보면 문제해결능력과 사고력이 생기지 않을까합니다.

 

문제 요구사항입니다.

1) 일을 시작하는 시작일자와, 일을 끝마치는 종료일자가 칼럼으로 주어집니다.

2) 일을 끝마치는 날짜와 다른 행의 일을 시작하는 날짜가 동일할 경우 프로젝트는 동일한 프로젝트로 간주합니다.

ex) 2020-12-17 2020-12-18

     2020-12-18 2020-12-19

2020-12-17 ~ 2020-12-19가 동일한 프로젝트

3) 동일한 프로젝트로 간주되는 프로젝트의 시작일자와 종료일자를 구합니다.

4) 프로젝트 기간을 오름차순으로 정렬하며, 동일한 프로젝트 기간일경우 시작일자를 오름차순으로 정렬합니다.

 

 

SELECT Start_Date, Min(End_Date)
FROM 
    (SELECT Start_Date FROM Projects WHERE Start_Date NOT IN (SELECT End_Date FROM Projects)) a,
    (SELECT End_Date FROM Projects WHERE End_Date NOT IN (SELECT Start_Date FROM Projects)) b 


WHERE Start_Date < End_Date
GROUP BY Start_Date 
ORDER BY DATEDIFF(Min(End_Date), Start_Date), Start_Date

 

풀이는 다음과 같습니다.

 

1) 우선 같은 값을 가지지 않는 시작일자와 종료일자를 구합니다.

2) 인라인뷰로 구했던 행들을 크로스 조인합니다.

3) 크로스 조인했던 값들 중 종료일자가 큰 행들을 구합니다.

4) 시작일자로 그룹핑한 후 프로젝트 기간을 오름차순, 시작일자 오름차순으로 정렬합니다.

 

 

 

출저 :

'DB' 카테고리의 다른 글

SQL 문제풀이 6)  (0) 2020.12.20
SQL 문제풀이 5)  (0) 2020.12.19
SQL 문제풀이 3)  (0) 2020.12.17
SQL 문제풀이 2)  (0) 2020.12.16
SQL 문제풀이 1)  (0) 2020.12.15