lagInFrame

lagInFrame

정렬된 프레임 안에서 현재 행보다 지정된 물리적 오프셋(row)만큼 앞선 행에서 평가된 값을 반환하는 윈도우 함수예요.

lagInFrame의 동작은 표준 SQL의 lag 윈도우 함수와 달라요. ClickHouse의 lagInFrame 윈도우 함수는 윈도우 프레임을 존중합니다. lag와 동일한 동작을 얻으려면 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING을 사용하세요.

출처: 문서

본문

구문(Syntax)

lagInFrame(x[, offset[, default]])
  OVER ([[PARTITION BY grouping_column] [ORDER BY sorting_column]
        [ROWS, RANGE, or GROUPS expression_to_bound_rows_withing_the_group]] | [window_name])
FROM table_name
WINDOW window_name as ([[PARTITION BY grouping_column] [ORDER BY sorting_column])

윈도우 함수 구문에 대한 자세한 내용은 윈도우 함수 - 구문을 참고하세요.

인자(Parameters)

  • x — 컬럼 이름.
  • offset — 적용할 오프셋. (U)Int*. (선택, 기본값 1).
  • default — 계산된 행이 윈도우 프레임 경계를 벗어날 때 반환할 값. (선택, 생략하면 컬럼 타입의 기본값).

반환 값(Returned value)

  • 정렬된 프레임 안에서 현재 행보다 지정된 물리적 오프셋만큼 앞선 행에서 평가된 값.

예시(Example)

이 예시는 특정 주식의 과거 데이터를 보면서 lagInFrame 함수로 주식 종가의 일별 변화량(delta)과 백분율 변화를 계산해요.

쿼리(Query)

CREATE TABLE stock_prices
(
    `date`   Date,
    `open`   Float32, -- opening price
    `high`   Float32, -- daily high
    `low`    Float32, -- daily low
    `close`  Float32, -- closing price
    `volume` UInt32   -- trade volume
)
Engine = Memory;

INSERT INTO stock_prices FORMAT Values
    ('2024-06-03', 113.62, 115.00, 112.00, 115.00, 438392000),
    ('2024-06-04', 115.72, 116.60, 114.04, 116.44, 403324000),
    ('2024-06-05', 118.37, 122.45, 117.47, 122.44, 528402000),
    ('2024-06-06', 124.05, 125.59, 118.32, 121.00, 664696000),
    ('2024-06-07', 119.77, 121.69, 118.02, 120.89, 412386000);

쿼리(Query)

SELECT
    date,
    close,
    lagInFrame(close, 1, close) OVER (ORDER BY date ASC
       ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
     ) AS previous_day_close,
    COALESCE(ROUND(close - previous_day_close, 2)) AS delta,
    COALESCE(ROUND((delta / previous_day_close) * 100, 2)) AS percent_change
FROM stock_prices
ORDER BY date DESC

응답(Response)

   ┌───────date─┬──close─┬─previous_day_close─┬─delta─┬─percent_change─┐
1. │ 2024-06-07 │ 120.89 │                121 │ -0.11 │          -0.09 │
2. │ 2024-06-06 │    121 │             122.44 │ -1.44 │          -1.18 │
3. │ 2024-06-05 │ 122.44 │             116.44 │     6 │           5.15 │
4. │ 2024-06-04 │ 116.44 │                115 │  1.44 │           1.25 │
5. │ 2024-06-03 │    115 │                115 │     0 │              0 │
   └────────────┴────────┴────────────────────┴───────┴────────────────┘

더 알아보기 (Learn more)