순위·이전/다음 행 / Snowflake
LAG
이전 행 값 가져오기
어디에 쓰나요?
이전·다음 값이나 기간 내 처음·마지막 값과 비교합니다.
반환값입력에 따른 유형
작성 방법
LAG(value[, offset[, fallback]]) OVER ([PARTITION BY partition] ORDER BY order)
인수에 무엇을 넣나요?
| 인수 | 유형 / 지정 방법 | 입력 예 | 역할 / 기본값 |
|---|
value필수 | EXPRESSION | value / 42 / NULL | 처리할 값이나 열. 호환되는 유형 사용. |
offset선택 | INTEGER | 1 / 0 / -1 | 양수는 이전 방향. +1은 이전 행, −1은 다음 행. 0은 현재 행, 기본 1. OVER 안의 ORDER BY 순서를 따릅니다. |
fallback선택 | EXPRESSION | -1 / NULL | 같은 파티션에 대상 행이 없을 때 반환할 값. 기본 NULL. 행은 있지만 값이 NULL이면 NULL을 그대로 반환합니다. |
partition선택 | EXPRESSION | department / user_id | PARTITION BY 그룹 열. 생략하면 모든 행이 한 그룹. |
order필수 | ORDER BY EXPRESSION | value DESC / id | 정렬 열·식. 함수 인수가 아닌 OVER 또는 집계 절에 지정. |
그대로 실행할 수 있는 SQL
입력 데이터가 포함되어 있어 테이블 준비가 필요 없습니다.
WITH data AS (
SELECT 1 AS id, 10 AS value
UNION ALL SELECT 2, NULL
UNION ALL SELECT 3, 30
)
SELECT id, value,
LAG(value, 1, -1) OVER (ORDER BY id) AS result
FROM data
ORDER BY id;
이 SQL의 결과
| id | value | result |
|---|
1 | 10 | -1 |
2 | NULL | 10 |
3 | 30 | NULL |
사용 전 알아둘 점
이전·다음은 OVER 안의 ORDER BY 기준입니다. 날짜 오름차순이면 다음은 더 최근, 내림차순이면 더 과거입니다. 동률에는 고유 ID를 추가하세요. 파티션을 넘지 않고 NULL 행도 셉니다. Snowflake는 음수 offset이면 방향이 반대입니다. 기본 RESPECT NULLS는 NULL 행도 세고 IGNORE NULLS는 건너뜁니다. fallback은 대상 행이 없을 때만 사용합니다.
다른 SQL에서는 BigQuery
LAG(value[, offset[, fallback]]) OVER ([PARTITION BY partition] ORDER BY order)
BigQuery offset은 0 이상 정수 리터럴이나 파라미터입니다. 음수·NULL은 오류. fallback은 대상 행이 없을 때만 쓰며 value 유형으로 변환 가능한 상수 식이어야 합니다.
공식 레퍼런스 ↗