sql 문의 드립니다. 영감이 떠오르질 않네요 ㅠㅠ 0 3 590

by 김춘성 [SQL Query] [2020.06.23 11:34:48]


지역 시작일자 종료일자         
서울 2020-06-01 2020-06-30  
서울 2020-07-01 2020-07-05  
대전 2020-07-06 2020-07-31  
대전 2020-08-01 2020-08-05  
대전 2020-08-06 2020-08-15  
서울 2020-08-16 2020-08-20  
서울 2020-08-21 2020-09-05  

 

안녕하세요.

위에 보시는 것 처럼 기간이 레코드마다 기간이 연결되어 있구요.

그런데 지역별로 기간을 그룹핑해서 보여주고 싶습니다.

아래와 같이요 ㅠㅠ

 

지역 시작일자 종료일자     
서울 2020-06-01 2020-07-05  
대전 2020-07-06 2020-08-15  
서울 2020-08-16 2020-09-05  

 

이렇게요. ㅠㅠ

읽어주셔서 감사합니다.

by 김춘성 [2020.06.23 11:39:13]
지역 시작일자 종료일자   col      
서울 2020-06-01 2020-06-30 1
서울 2020-07-01 2020-07-05 1
대전 2020-07-06 2020-07-31 2
대전 2020-08-01 2020-08-05 2
대전 2020-08-06 2020-08-15 2
서울 2020-08-16 2020-08-20 3
서울 2020-08-21 2020-09-05 3

 

col 컬럼에 이런 식으로 group by 할 수 있는 정보만 만들어 줄 수 있다면 가능 할텐데.. 모르겠네요 ㅎㅎ


by 마농 [2020.06.23 12:23:28]
WITH t AS
(
SELECT '서울' loc, '2020-06-01' sdt, '2020-06-30' edt FROM dual
UNION ALL SELECT '서울', '2020-07-01', '2020-07-05' FROM dual
UNION ALL SELECT '대전', '2020-07-06', '2020-07-31' FROM dual
UNION ALL SELECT '대전', '2020-08-01', '2020-08-05' FROM dual
UNION ALL SELECT '대전', '2020-08-06', '2020-08-15' FROM dual
UNION ALL SELECT '서울', '2020-08-16', '2020-08-20' FROM dual
UNION ALL SELECT '서울', '2020-08-21', '2020-09-05' FROM dual
)
SELECT loc
     , MIN(sdt) sdt
     , MAX(edt) edt
  FROM (SELECT loc, sdt, edt
             , SUM(flag) OVER(PARTITION BY loc ORDER BY sdt) grp
          FROM (SELECT loc, sdt, edt
                     , DECODE( LAG(edt) OVER(PARTITION BY loc ORDER BY sdt)
                             , TO_CHAR(TO_DATE(sdt, 'yyyy-mm-dd') - 1, 'yyyy-mm-dd')
                             , 0, 1) flag
                  FROM t
                )
        )
 GROUP BY loc, grp
 ORDER BY sdt
;
-- http://gurubee.net/lecture/2855

 


by 김춘성 [2020.06.23 13:00:24]

감사드립니다.

행복한 하루 되세요^^

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