문제 링크: http://www.gurubee.net/lecture/2194
(내 댓글 확인하기)
[퀴즈] 연속된 날짜를 하나의 그룹으로 표현해 보자
이번 퀴즈로 배워보는 SQL 시간에는 연속된 날짜를 하나의 그룹으로 표현하는 쿼리를 어떻게 작성하는지에 대해 알아본다. 지면 특성..
www.gurubee.net
내 쿼리
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