안녕하세요.
예시와 같이 코드, 종료일자로 결과를 코드, 시작일자, 종료일자로 조회하는 쿼리를 질문 합니다.
각 코드의 첫번째는 시작일자는 '2020-01-01'이고 동일코드의 두번째 시작일자는 이전 코드의 종료일자+1로 구하려고 합니다.
my sql 5.7를 사용 합니다.
예시)
| 코드 | 종료일자 |
| A | 2022-10-31 |
| A | 2999-12-31 |
| B | 2999-12-31 |
| C | 2022-11-30 |
| C | 2022-12-31 |
| C | 2999-12-31 |
| D | 2999-12-31 |
| E | 2022-06-30 |
| E | 2999-12-31 |
| F | 2999-12-31 |
| G | 2999-12-31 |
| H | 2022-03-31 |
| H | 2022-09-30 |
| H | 2022-12-31 |
| H | 2999-12-31 |
결과)
| 코드 | 시작일자 | 종료일자 |
| A | 2000-01-01 | 2022-10-31 |
| A | 2022-11-01 | 2999-12-31 |
| B | 2000-01-01 | 2999-12-31 |
| C | 2000-01-01 | 2022-11-30 |
| C | 2022-12-01 | 2022-12-31 |
| C | 2023-01-01 | 2999-12-31 |
| D | 2000-01-01 | 2999-12-31 |
| E | 2000-01-01 | 2022-06-30 |
| E | 2022-07-01 | 2999-12-31 |
| F | 2000-01-01 | 2999-12-31 |
| G | 2000-01-01 | 2999-12-31 |
| H | 2000-01-01 | 2022-03-31 |
| H | 2022-04-01 | 2022-09-30 |
| H | 2022-10-01 | 2022-12-31 |
| H | 2023-01-01 | 2999-12-31 |
감사합니다.
WITH t AS
(
SELECT 'A' cd, '2022-10-31' edt
UNION ALL SELECT 'A', '2999-12-31'
UNION ALL SELECT 'B', '2999-12-31'
UNION ALL SELECT 'C', '2022-11-30'
UNION ALL SELECT 'C', '2022-12-31'
UNION ALL SELECT 'C', '2999-12-31'
UNION ALL SELECT 'D', '2999-12-31'
UNION ALL SELECT 'E', '2022-06-30'
UNION ALL SELECT 'E', '2999-12-31'
UNION ALL SELECT 'F', '2999-12-31'
UNION ALL SELECT 'G', '2999-12-31'
UNION ALL SELECT 'H', '2022-03-31'
UNION ALL SELECT 'H', '2022-09-30'
UNION ALL SELECT 'H', '2022-12-31'
UNION ALL SELECT 'H', '2999-12-31'
)
SELECT a.cd
, IFNULL(DATE_ADD(MAX(b.edt), INTERVAL 1 DAY), '2020-01-01') sdt
, a.edt
FROM t a
LEFT OUTER JOIN t b
ON a.cd = b.cd
AND a.edt > b.edt
GROUP BY a.cd, a.edt
;
마농님 많은 도움이 되었습니다.
감사합니다.