LAST_VALUE
LAST_VALUE
정렬된 값 그룹 안의 마지막 값을 반환하는 윈도우 함수예요. 파티션 내에서 각 행 기준 특정 순서의 마지막 값을 구하고 싶을 때 씁니다.
본문
LAST_VALUE( <expr> ) [ { IGNORE | RESPECT } NULLS ]
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ <window_frame> ] )
인자
expr— 반환 값을 결정하는 표현식.expr1— 행을 파티션으로 나누는 표현식. 하나 또는 쉼표로 구분된 목록을 지정할 수 있어요.expr2— 행을 정렬하는 표현식. 하나 또는 쉼표로 구분된 목록.{ IGNORE | RESPECT } NULLS—expr에 NULL 값이 있을 때 무시할지 존중할지 지정해요.IGNORE NULLS는 마지막으로 나오는 NULL이 아닌 값을 반환해요.RESPECT NULLS는 표현식의 마지막 값이 NULL이면 NULL을 반환해요.- 기본값:
RESPECT NULLS
사용 메모
- 순위 관련 함수라 반드시 윈도우를 지정해야 해요. 윈도우 절은
PARTITION BY expr1(선택),ORDER BY expr2(필수),window_frame(선택) 하위 절로 구성돼요. - 윈도우 안의 행 순서(따라서 쿼리 결과)는 ORDER BY 절의 키가 각 행을 유일하게 만들 때만 완전히 결정적이에요.
- OVER 절 안의 ORDER BY는 윈도우 안에서만 행 순서를 제어하지, 전체 쿼리 출력 순서는 제어하지 않아요. 출력 순서를 정하려면 쿼리 최외곽에 별도 ORDER BY를 쓰세요.
window_frame을 지정하지 않으면 기본 프레임은ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING(전체 윈도우)이에요. 이는 ANSI 표준 기본값(RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)과 다르므로 주의하세요.
예시 — column1로 파티션을 나눠 column2의 LAST_VALUE를 구해요.
SELECT
column1,
column2,
LAST_VALUE(column2) OVER (PARTITION BY column1 ORDER BY column2) AS column2_last
FROM VALUES
(1, 10), (1, 11), (1, 12),
(2, 20), (2, 21), (2, 22);
+---------+---------+--------------+
| COLUMN1 | COLUMN2 | COLUMN2_LAST |
|---------+---------+--------------|
| 1 | 10 | 12 |
| 1 | 11 | 12 |
| 1 | 12 | 12 |
| 2 | 20 | 22 |
| 2 | 21 | 22 |
| 2 | 22 | 22 |
+---------+---------+--------------+