Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

lag

Devuelve un valor evaluado en la fila situada en un OFFSET físico especificado antes de la fila actual dentro del frame ordenado. Esta función es similar a lagInFrame, pero siempre usa el frame ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.

Sintaxis

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 obtener más detalles sobre la sintaxis de las funciones de ventana, consulte: Window Functions - Syntax.

Parámetros

  • x — Nombre de la columna.
  • offset — Desplazamiento que se aplicará. (U)Int*. (Opcional: 1 de forma predeterminada).
  • default — Valor que se devolverá si la fila calculada queda fuera de los límites del marco de la ventana. (Opcional: el valor predeterminado del tipo de columna cuando se omite).

Valor devuelto

  • Valor evaluado en la fila situada en un desplazamiento físico especificado antes de la fila actual dentro del marco ordenado.

Ejemplo

Este ejemplo analiza datos históricos de una acción concreta y usa la función lag para calcular la variación diaria y el cambio porcentual en el precio de cierre de la acción.

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