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

FIRST_VALUE・LAST_VALUE

ウィンドウ内の先頭・末尾の値を取得する関数を学びます。

FIRST_VALUE・LAST_VALUEとは

FIRST_VALUE(col)はウィンドウの最初の行の値を、LAST_VALUE(col)はウィンドウの最後の行の値を返します。 LAST_VALUEはデフォルトのフレーム範囲(現在行まで)の影響を受けるため、 正確な末尾の値を得るにはフレーム句の指定が必要です。

  • FIRST_VALUE(col) OVER (ORDER BY col) — ウィンドウ先頭の値
  • LAST_VALUE(col) OVER (... ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) — ウィンドウ末尾の値

例1: FIRST_VALUEで最高スコアを各行に表示

テーブル定義
CREATE TABLE students (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  score INTEGER NOT NULL
);
INSERT INTO students VALUES (1, '田中太郎', 85);
INSERT INTO students VALUES (2, '鈴木花子', 92);
INSERT INTO students VALUES (3, '佐藤一郎', 78);
INSERT INTO students VALUES (4, '山田二郎', 88);
SQLエディタ

例2: 部門別の最初・最後の採用者

テーブル定義
CREATE TABLE employees (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  department TEXT NOT NULL,
  hire_date TEXT NOT NULL
);
INSERT INTO employees VALUES (1, '田中太郎', '営業部', '2018-04-01');
INSERT INTO employees VALUES (2, '鈴木花子', '開発部', '2019-07-15');
INSERT INTO employees VALUES (3, '佐藤一郎', '営業部', '2020-10-01');
INSERT INTO employees VALUES (4, '山田二郎', '開発部', '2017-01-10');
INSERT INTO employees VALUES (5, '伊藤花代', '営業部', '2022-04-01');
SQLエディタ

例3: LAST_VALUEにフレーム句を指定

テーブル定義
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', 130000);
SQLエディタ