🗃️SQLLearn
ウィンドウ関数 レッスン4

LAG・LEAD

前後の行の値を参照するLAGとLEAD関数で時系列分析を行います。

LAGとLEADとは

LAG(col, n)は現在行のn行前の値を、LEAD(col, n)はn行後の値を返します。 nを省略すると1行前/後になります。 前月比・前日比などの時系列比較や、連続する行の差分計算に非常に便利です。

  • LAG(col) — 1行前の値(前の値がなければNULL)
  • LAG(col, 2) — 2行前の値
  • LAG(col, 1, 0) — 1行前の値、なければデフォルト値0
  • LEAD(col) — 1行後の値

例1: 前月比の計算

テーブル定義
CREATE TABLE monthly_sales (
  month TEXT PRIMARY KEY,
  sales INTEGER NOT NULL
);
INSERT INTO monthly_sales VALUES ('2024-01', 100000);
INSERT INTO monthly_sales VALUES ('2024-02', 120000);
INSERT INTO monthly_sales VALUES ('2024-03', 115000);
INSERT INTO monthly_sales VALUES ('2024-04', 135000);
INSERT INTO monthly_sales VALUES ('2024-05', 128000);
SQLエディタ

例2: LEADで次の値を参照

テーブル定義
CREATE TABLE events (
  id INTEGER PRIMARY KEY,
  event_date TEXT NOT NULL,
  event_name TEXT NOT NULL
);
INSERT INTO events VALUES (1, '2024-01-15', '新年会');
INSERT INTO events VALUES (2, '2024-03-20', '春季セミナー');
INSERT INTO events VALUES (3, '2024-06-10', '夏祭り');
INSERT INTO events VALUES (4, '2024-09-05', '秋のイベント');
SQLエディタ

例3: デフォルト値付きLAG

テーブル定義
CREATE TABLE employees (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  salary INTEGER NOT NULL
);
INSERT INTO employees VALUES (1, '田中太郎', 300000);
INSERT INTO employees VALUES (2, '鈴木花子', 380000);
INSERT INTO employees VALUES (3, '佐藤一郎', 420000);
INSERT INTO employees VALUES (4, '山田二郎', 500000);
SQLエディタ