ウィンドウ関数 レッスン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行前の値、なければデフォルト値0LEAD(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エディタ