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 41488 게시물 읽기
No. 41488
연속된 건수 구하는 쿼리 문의 드립니다.
작성자
꼬르
작성일
2017-11-29 17:02
조회수
6,218

 연속된 데이터 구간을 찾아야 하는데 어렵네요ㅜㅜ

사번             일시               건수

 

11111        20141123           0

11111        20141124           2

11111        20141125           3

11111        20141126           6

11111        20141127           2

11111        20141128           0

11111        20141129           1

11111        20141130           0

11111        20141201           1

11111        20141202           2

11111        20141203           0

11111        20141204           1

11111        20141205           2

위 데이터에서 건수가 0이 아닌 숫자중에서

연속으로 된 건 중에 max 값을 뽑아야 합니다.

결과는 

 

11111     20141224     2

11111     20141225     3

11111     20141126     6

11111     20141127     2

위 구간이 0이 아닌 건중에 연속된 건이 많은 데이터를 추출한 겁니다.

 

결과는 아래와 같이 나와야 합니다.

사번      시작일시      종료일시     건수

11111     20141224     20141127     4

 

 

 

 

아무리 해도 안되네요ㅜㅜ

도와 주시면 감사하겠습니다.

 

 

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

WITH t AS
(
SELECT 11111 id, '20141123' dt, 0 cnt FROM dual
UNION ALL SELECT 11111, '20141124', 2 FROM dual
UNION ALL SELECT 11111, '20141125', 3 FROM dual
UNION ALL SELECT 11111, '20141126', 6 FROM dual
UNION ALL SELECT 11111, '20141127', 2 FROM dual
UNION ALL SELECT 11111, '20141128', 0 FROM dual
UNION ALL SELECT 11111, '20141129', 1 FROM dual
UNION ALL SELECT 11111, '20141130', 0 FROM dual
UNION ALL SELECT 11111, '20141201', 1 FROM dual
UNION ALL SELECT 11111, '20141202', 2 FROM dual
UNION ALL SELECT 11111, '20141203', 0 FROM dual
UNION ALL SELECT 11111, '20141204', 1 FROM dual
UNION ALL SELECT 11111, '20141205', 2 FROM dual
)
SELECT *
  FROM (SELECT id
             , MIN(dt) sdt
             , MAX(dt) edt
             , COUNT(*) cnt
             , RANK() OVER(ORDER BY COUNT(*) DESC) rk
          FROM (SELECT id, dt
                     , TO_DATE(dt, 'yyyymmdd')
                     - ROW_NUMBER() OVER(PARTITION BY id ORDER BY dt) gb
                  FROM t
                 WHERE cnt > 0
                )
         GROUP BY id, gb
        )
 WHERE rk = 1
;

마농(manon94)님이 2017-12-01 15:50에 작성한 댓글입니다.

마농님~

정말 감사합니다.

정확히 제가 원하는 결과 입니다.

다시 한번 감사 드립니다.

꼬르님이 2017-12-01 16:45에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41492rownum 구간 null row까지 전부 표현 가능한가요? [2]
김기훈
2017-12-11
6141
41490누적합계 구하는 쿼리 질문 드립니다. [1]
하하하하
2017-12-04
6847
41489샘플스키마 [1]
부글부글
2017-12-04
5768
41488연속된 건수 구하는 쿼리 문의 드립니다. [2]
꼬르
2017-11-29
6218
41487데이터베이스 공유하기 [1]
이글이글
2017-11-28
6044
41486group by 문법 [1]
찬호
2017-11-28
6119
41485redo log file이 다 차지 않았는데 log switch가 발생하는경우 [1]
goblin
2017-11-22
5890
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다