Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

lagInFrame

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

Sintaxis

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])

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 supera los límites del marco de ventana. (Opcional: 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 específica y usa la función lagInFrame para calcular una 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,
    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
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