MYSQL 동일 코드일때 시작일자에 이전 종료일자+1일 쿼리 관련 질문입니다. 0 2 1,795

by 오라클초보 [MySQL] 시작일자 종료일자 동일코드 [2023.01.03 21:26:41]


안녕하세요.

예시와 같이 코드, 종료일자로 결과를 코드, 시작일자, 종료일자로 조회하는 쿼리를 질문 합니다.

각 코드의 첫번째는 시작일자는 '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

감사합니다.

by 마농 [2023.01.03 23:19:51]
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
;

 


by 오라클초보 [2023.01.05 20:49:49]

마농님 많은 도움이 되었습니다.

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입