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

フレーム句

ROWS/RANGE BETWEENでウィンドウのフレーム範囲を細かく制御する方法を学びます。

フレーム句とは

フレーム句はOVER句の中で、各行の計算に使う行範囲(フレーム)を指定します。ROWS BETWEENは行数で範囲を指定し、RANGE BETWEENは値の範囲で指定します。 移動平均や移動合計の窓幅を制御する際に使います。

  • ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW — 先頭から現在行(累積)
  • ROWS BETWEEN 2 PRECEDING AND CURRENT ROW — 2行前から現在行(3行窓)
  • ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING — 現在行から末尾
  • ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING — 全行

例1: 累積合計 vs 移動合計

テーブル定義
CREATE TABLE daily_sales (
  day TEXT PRIMARY KEY,
  sales INTEGER NOT NULL
);
INSERT INTO daily_sales VALUES ('2024-01-01', 10000);
INSERT INTO daily_sales VALUES ('2024-01-02', 15000);
INSERT INTO daily_sales VALUES ('2024-01-03', 12000);
INSERT INTO daily_sales VALUES ('2024-01-04', 18000);
INSERT INTO daily_sales VALUES ('2024-01-05', 14000);
SQLエディタ

例2: 前後の行を含むフレーム

テーブル定義
CREATE TABLE daily_temp (
  day TEXT PRIMARY KEY,
  temperature REAL NOT NULL
);
INSERT INTO daily_temp VALUES ('2024-01-01', 5.0);
INSERT INTO daily_temp VALUES ('2024-01-02', 8.0);
INSERT INTO daily_temp VALUES ('2024-01-03', 3.0);
INSERT INTO daily_temp VALUES ('2024-01-04', 10.0);
INSERT INTO daily_temp VALUES ('2024-01-05', 7.0);
SQLエディタ

例3: 末尾からの逆累積

テーブル定義
CREATE TABLE monthly_revenue (
  month TEXT PRIMARY KEY,
  revenue INTEGER NOT NULL
);
INSERT INTO monthly_revenue VALUES ('2024-01', 100000);
INSERT INTO monthly_revenue VALUES ('2024-02', 120000);
INSERT INTO monthly_revenue VALUES ('2024-03', 90000);
INSERT INTO monthly_revenue VALUES ('2024-04', 110000);
SQLエディタ