안녕하세요.
예시와 같이 코드, 종료일자로 결과를 코드, 시작일자, 종료일자로 조회하는 쿼리를 질문 합니다.
각 코드의 첫번째는 시작일자는 '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 ;