코드별 연속된 일자의 시작일자 종료일자 구하는 방법 문의 1 2 3,342

by 우니우니 [SQL Query] 시작일자 [2023.12.13 16:32:07]


아래 처럼 코드별로 연속일 일자로 데이터가 있을 경우 

WHIT t AS
(
SELECT 'A' cd, '20230101' dt from dual
UNION ALL SELECT 'A' , '20230103' from dual
UNION ALL SELECT 'A' , '20230104' from dual
UNION ALL SELECT 'B' , '20230103' from dual
UNION ALL SELECT 'A' , '20230106' from dual
UNION ALL SELECT 'A' , '20230107' from dual
UNION ALL SELECT 'B' , '20230106' from dual
UNION ALL SELECT 'B' , '20230107' from dual
)

결과값은 아래처럼 나왔으면 좋겠습니다.

코드 시작일자       종료일자

A     20230101       20230101

A     20230103       20230104

A     20230106       20230107

B      20230103       20230103

B      20230106       20230107 

고수님들 답변 부탁 드립니다.

by 마농 [2023.12.13 16:39:28]

WITH t AS
(
SELECT 'A' cd, '20230101' dt FROM dual
UNION ALL SELECT 'A' , '20230103' FROM dual
UNION ALL SELECT 'A' , '20230104' FROM dual
UNION ALL SELECT 'B' , '20230103' FROM dual
UNION ALL SELECT 'A' , '20230106' FROM dual
UNION ALL SELECT 'A' , '20230107' FROM dual
UNION ALL SELECT 'B' , '20230106' FROM dual
UNION ALL SELECT 'B' , '20230107' FROM dual
)
SELECT cd
     , MIN(dt) sdt
     , MAX(dt) edt
  FROM (SELECT cd, dt FROM t ORDER BY cd, dt)
 GROUP BY cd, TO_DATE(dt, 'yyyymmdd') - ROWNUM
 ORDER BY cd, sdt
;
-- http://gurubee.net/lecture/2194

by 우니우니 [2023.12.13 17:30:09]

감사합니다.

group by에 저런 방법을 쓸지도 생각 못해봤네요 

마농님때문에 생각이 넓어 지는 느낌이랄까 

다시 한번 감사드립니다.

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