SQL LAST_VALUE

概要: このチュートリアルでは、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_clauseorder_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テーブルを使用します。

Employees & Departments Tables

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)

次の図は、クエリの出力結果を示しています

SQL LAST_VALUE Function Over Partition Example

クエリを詳しく見てみましょう

  • まず、PARTITION BY句は、従業員を部門ごとに分割しました。
  • 次に、ORDER BY句は、各部門の従業員を給与の昇順で並べ替えました。
  • 最後に、LAST_VALUE()が各パーティションの並べ替えられた行に適用されます。フレームは各パーティションの最初の行から始まり、最後の行で終わるため、LAST_VALUE()は最も給与の高い従業員を選択しました。

このチュートリアルでは、SQL LAST_VALUE()関数を使用して、順序付けられた値のセットの最後の値を取得する方法を学習しました。

このチュートリアルは役に立ちましたか?