database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40046 게시물 읽기
No. 40046
날짜이력 기간별 최소일자,최대일자
작성자
정@@
작성일
2013-03-13 10:50
조회수
6,250

아래와 같은 이력이 있습니다.

                                   시작일자              종료일자

1        S0203              20121218         20121219
2        S0203              20121226         20121226
3        S0203              20121227         20121228
4        S0204              20130129         20130131
5        S0204              20130204         20130220
6        S0204              20130221         20130305
7        S0204              20130306         99991231

이 기간들을 연속하는 날짜끼리 그룹지어서 최소 시작일자 최대 종료일자를 구하려고 하는데요...

최종적으로 얻고자 하는 데이터는 다음과 같습니다.

1        S0203               20121218         20121219
2        S0203               20121226         20130131
5        S0204               20130204         99991231

아무리 고민해봐도 답이 떠오르지 않아서 고수님들께 질문드립니다.

훌륭한 답변 기다리겠습니다.

 

 

 

이 글에 대한 댓글이 총 1건 있습니다.

WITH t AS
(
SELECT 1 pk, 'S0203' cd, '20121218' sdt, '20121219' edt FROM dual
UNION ALL SELECT 2, 'S0203', '20121226', '20121226' FROM dual
UNION ALL SELECT 3, 'S0203', '20121227', '20121228' FROM dual
UNION ALL SELECT 4, 'S0204', '20130129', '20130131' FROM dual
UNION ALL SELECT 5, 'S0204', '20130204', '20130220' FROM dual
UNION ALL SELECT 6, 'S0204', '20130221', '20130305' FROM dual
UNION ALL SELECT 7, 'S0204', '20130306', '99991231' FROM dual
)
SELECT MIN(pk) pk
     , cd
     , MIN(sdt) sdt
     , MAX(edt) edt
  FROM (SELECT pk, cd, sdt, edt
             , SUM(flag) OVER(PARTITION BY cd ORDER BY sdt) gb
          FROM (SELECT pk, cd, sdt, edt
                     , DECODE(LAG(edt) OVER(PARTITION BY cd ORDER BY sdt)
                       , TO_CHAR(TO_DATE(sdt, 'yyyymmdd') - 1, 'yyyymmdd')
                       , 0, 1) flag
                  FROM t
                )
        )
 GROUP BY cd, gb
 ORDER BY cd, gb
;

마농(manon94)님이 2013-03-13 13:40에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40049데이터 삭제 이력 확인 방법, 복구방법 있나요? [1]
김범재
2013-03-14
5827
40048Commit 만 사용시... [1]
아폴론
2013-03-14
6106
40047NULL과 '' 비교관련 [1]
mb
2013-03-13
5363
40046날짜이력 기간별 최소일자,최대일자 [1]
정@@
2013-03-13
6250
40045B테이블값을 A테이블로 업데이트 조건같은경우만.. [2]
겜블러
2013-03-12
5332
40043가로를 분리 하여 세로로 부탁드립니다. [5]
감사합니다
2013-03-11
7708
40042case when 에서 결합연산자 사용질문입니다. [3]
서기라
2013-03-08
5889
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다