Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

lag

Retorna um valor avaliado na linha localizada em um deslocamento físico especificado antes da linha atual dentro do frame ordenado. Esta função é semelhante a lagInFrame, mas sempre usa o frame ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.

Sintaxe

lag(x[, offset[, default]])
  OVER ([[PARTITION BY grouping_column] [ORDER BY sorting_column]] | [window_name])
FROM table_name
WINDOW window_name as ([[PARTITION BY grouping_column] [ORDER BY sorting_column])

Para mais detalhes sobre a sintaxe de funções de janela, consulte: Funções de janela - Sintaxe.

Parâmetros

  • x — Nome da coluna.
  • offset — Deslocamento a ser aplicado. (U)Int*. (Opcional — 1 por padrão).
  • default — Valor a ser retornado se a linha calculada exceder os limites do frame da janela. (Opcional — valor padrão do tipo da coluna quando omitido).

Valor retornado

  • Valor avaliado na linha que está em um deslocamento físico especificado antes da linha atual dentro do frame ordenado.

Exemplo

Este exemplo analisa dados históricos de uma ação específica e usa a função lag para calcular a variação diária e a variação percentual no preço de fechamento da ação.

Querysql
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);
Querysql
SELECT
    date,
    close,
    lag(close, 1, close) OVER (ORDER BY date ASC) 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
Responseresponse
   ┌───────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 │
   └────────────┴────────┴────────────────────┴───────┴────────────────┘
Navigation