Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

lagInFrame

Renvoie une valeur évaluée pour la ligne située à un décalage physique spécifié avant la ligne courante dans le cadre ordonné.

Syntaxe

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

Pour plus de détails sur la syntaxe des fonctions de fenêtre, voir : Fonctions de fenêtre - Syntaxe.

Paramètres

  • x — Nom de la colonne.
  • offset — Décalage à appliquer. (U)Int*. (Facultatif - 1 par défaut).
  • default — Valeur à renvoyer si la ligne calculée dépasse les limites du frame de la fenêtre. (Facultatif - valeur par défaut du type de la colonne si omise).

Valeur retournée

  • Valeur évaluée à la ligne située à un décalage physique spécifié avant la ligne courante dans le frame ordonné.

Exemple

Cet exemple examine les données historiques d'une action donnée et utilise la fonction lagInFrame pour calculer la variation d'un jour à l'autre ainsi que la variation en pourcentage du cours de clôture de l'action.

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