LAST_VALUE

LAST_VALUE

정렬된 값 그룹 안의 마지막 값을 반환하는 윈도우 함수예요. 파티션 내에서 각 행 기준 특정 순서의 마지막 값을 구하고 싶을 때 씁니다.

출처: Snowflake SQL Reference

본문

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 |
+---------+---------+--------------+

더 알아보기 (Learn more)