SERIES BY
SERIES BY 절은 정렬된 결과 집합에서 특정 조건을 만족하는 연속적인 행의 구간(series)을 추출합니다. 연속된 구간에서 시작/종료 시각과 패턴을 분석할 때 사용합니다.
문법
SELECT ...
FROM table_name
[WHERE ...]
ORDER BY col [ASC | DESC]
SERIES BY condition_exprORDER BY절이 없으면_ARRIVAL_TIME컬럼 기준으로 정렬됩니다.GROUP BY를 사용하거나_ARRIVAL_TIME컬럼이 없는 VOLATILE / LOOKUP 테이블에서는 반드시ORDER BY를 명시해야 합니다.SERIES BY조건을 연속으로 만족하는 같은 구간의 행들은 동일한SERIESNUM()반환값을 가집니다.
예시
기본 사용
CREATE LOG TABLE t1 (c1 INTEGER, c2 INTEGER);
INSERT INTO t1 VALUES (0, 1);
INSERT INTO t1 VALUES (1, 2);
INSERT INTO t1 VALUES (2, 3);
INSERT INTO t1 VALUES (3, 2);
INSERT INTO t1 VALUES (4, 1);
INSERT INTO t1 VALUES (5, 2);
INSERT INTO t1 VALUES (6, 3);
INSERT INTO t1 VALUES (7, 1);
SELECT c1, c2
FROM t1
ORDER BY c1
SERIES BY c2 > 1;결과:
C1 C2
---------------------------
1 2
2 3
3 2
5 2
6 3SERIESNUM()으로 구간 번호 확인
SELECT c1, c2, SERIESNUM() AS grp
FROM t1
ORDER BY c1
SERIES BY c2 > 1;결과:
C1 C2 GRP
-----------------------------------
1 2 1
2 3 1
3 2 1
5 2 2
6 3 2TAG 테이블에서 연속 구간 분석
내부 쿼리에서 연속 구간별 번호를 생성하고, 외부 쿼리에서 구간 번호를 기준으로 집계합니다.
-- 100을 초과하는 연속 구간별 시작/끝 시각과 최댓값 조회
SELECT MIN(time) AS start_time,
MAX(time) AS end_time,
MAX(value) AS peak_value,
series_id
FROM (
SELECT time, value, SERIESNUM() AS series_id
FROM tag
WHERE name = 'PRESSURE-01'
AND time >= TO_DATE('2024-01-01', 'YYYY-MM-DD')
ORDER BY time
SERIES BY value > 100.0
)
GROUP BY series_id
ORDER BY series_id;관련 문서
- SELECT hint syntax — SELECT 힌트 문법과 사용 예제
- window function / OVER syntax — 윈도우 기반 분석과의 차이
최근 업데이트