概要: このチュートリアルでは、SQL LAST_VALUE()
関数を使用して、順序付けられた値のセットの最後の値を返す方法を学習します。
LAST_VALUE()関数の概要
LAST_VALUE()
は、順序付けられた値のセットの最後の値を返すウィンドウ関数です。
以下は、LAST_VALUE()
関数の構文を示しています
LAST_VALUE(expression) OVER (
partition_clause
order_clause
frame_clause
)
Code language: SQL (Structured Query Language) (sql)
この構文では
式
関数の戻り値。列、または単一の値となる式を指定できます。
OVER
句は、partition_clause
、order_clause
、およびframe_clause
の3つの句で構成されます。
partition_clause
partition_clause
句の構文は次のとおりです
PARTITION BY expr1, expr2, ...
Code language: SQL (Structured Query Language) (sql)
PARTITION BY
句は、結果セットの行を、LAST_VALUE()
関数が適用されるパーティションに分割します。 PARTITION BY
句は省略可能であるため、省略した場合、関数は結果セット全体を単一のパーティションとして扱います。
order_clause
order_clause
句は、LAST_VALUE()
関数が適用されるパーティション内の行の順序を指定します。 ORDER BY
句の構文は次のとおりです
ORDER BY expr1 [ASC | DESC], expr2, ...
Code language: SQL (Structured Query Language) (sql)
frame_clause
frame_clause
は、評価されるパーティションのサブセット(またはフレーム)を定義します。フレーム句の詳細については、ウィンドウ関数チュートリアルを参照してください。
SQL LAST_VALUE()関数の例
デモンストレーションには、サンプルデータベースのemployees
テーブルとdepartments
テーブルを使用します。

A) 結果セットの例に対するSQL LAST_VALUE()関数の使用
次のステートメントは、会社で最も給与の高い従業員を見つけます
SELECT
first_name,
last_name,
salary,
LAST_VALUE (first_name) OVER (
ORDER BY salary
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) highest_salary
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
出力の一部を以下に示します
この例では、ORDER BY
句は従業員を給与で並べ替え、LAST_VALUE()
は最も低い給与の従業員の氏名を選択しました。 (原文の間違い:最低ではなく最高の給与)
フレーム句は次のとおりです
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
Code language: SQL (Structured Query Language) (sql)
これは、フレームが結果セットの最初の行(UNBOUNDED PRECEDING
)から始まり、最後の行(UNBOUNDED FOLLOWING
)で終わることを意味します。
B) パーティションの例に対するSQL LAST_VALUE()の使用
次のステートメントは、各部門で最も給与の高い従業員を見つけます。
SELECT
first_name,
last_name,
department_name,
salary,
LAST_VALUE (CONCAT(first_name,' ',last_name)) OVER (
PARTITION BY department_name
ORDER BY salary
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) highest_salary
FROM
employees e
INNER JOIN departments d
ON d.department_id = e.department_id;
Code language: SQL (Structured Query Language) (sql)
次の図は、クエリの出力結果を示しています

クエリを詳しく見てみましょう
- まず、
PARTITION BY
句は、従業員を部門ごとに分割しました。 - 次に、
ORDER BY
句は、各部門の従業員を給与の昇順で並べ替えました。 - 最後に、
LAST_VALUE()
が各パーティションの並べ替えられた行に適用されます。フレームは各パーティションの最初の行から始まり、最後の行で終わるため、LAST_VALUE()
は最も給与の高い従業員を選択しました。
このチュートリアルでは、SQL LAST_VALUE()
関数を使用して、順序付けられた値のセットの最後の値を取得する方法を学習しました。