문제 링크: http://www.gurubee.net/lecture/2194
(내 댓글 확인하기)
내 쿼리
WITH TMP
as (
SELECT 100 NO, '20090101' DT FROM dual
UNION ALL SELECT 100, '20090102' FROM dual
UNION ALL SELECT 100, '20090103' FROM dual
UNION ALL SELECT 100, '20090105' FROM dual
UNION ALL SELECT 100, '20090106' FROM dual
UNION ALL SELECT 100, '20090109' FROM dual
UNION ALL SELECT 100, '20090120' FROM dual
UNION ALL SELECT 200, '20090101' FROM dual
UNION ALL SELECT 200, '20090102' FROM dual
UNION ALL SELECT 200, '20090103' FROM dual
UNION ALL SELECT 200, '20090104' FROM dual
UNION ALL SELECT 200, '20090131' FROM dual
UNION ALL SELECT 200, '20090201' FROM dual
)
SELECT NO
, MIN(DT) FROM_DT
, MAX(DT) TO_DT
, COUNT(*) CNT
FROM
(
SELECT NO
, DT
-- , FLAG
, SUM(FLAG) OVER (PARTITION BY NO ORDER BY DT) GRP
FROM
(
SELECT NO
, DT
, DECODE(LAG(DT) OVER (PARTITION BY NO ORDER BY DT), DT-1, 0, 1) FLAG --연속된 값이면 0 아니면 1. 이전값 알 수 있는 LAG 함수 이용
FROM TMP
)
)
GROUP BY NO, GRP
ORDER BY NO, FROM_DT
;
깨달은 점
[내가 생각한 것]
LAG 함수까지는 생각해냄
[내가 생각 못한 것]
1. 이중 쿼리(FROM절)를 생각 못함.
2. 삼중 쿼리로 COUNT(*) 하고 GROUP BY 할 수 있다는 점...
'DATABASE > ORACLE' 카테고리의 다른 글
[ORACLE SQL 문제] 일별 누적 접속자 통계 구하기 (0) | 2020.03.03 |
---|---|
[ORACLE SQL 문제] 여러 테이블 혼합해서 결과 표 도출하기 (0) | 2020.03.03 |
테이블에 foreign key 컬럼 생성하는 법 (0) | 2020.02.20 |
[ORACLE] FUNCTION 생성: 숫자에 단위 표시(구분자로) & 숫자를 한글로 읽은 것 출력하는 함수 [FOR ~LOOP, IF - ELSE, CURSOR - FETCH] (0) | 2019.11.10 |
[ORACLE] 총정리 (총계/소계, RANK, GROUP BY (ROLLUP)-HAVING, PARTITION BY, UNION, CASE, NVL, JOIN, SUBSTR, FUNCTION) (0) | 2019.11.10 |
Comments