概要: このチュートリアルでは、SQL LEAD()
関数を使用して、現在の行に続く特定の物理オフセットにある行のデータにアクセスする方法を学習します。
SQL LEAD() 関数の概要
SQL LEAD()
は、現在の行に続く指定された物理オフセットにある行へのアクセスを提供するウィンドウ関数です。
たとえば、LEAD()
関数を使用すると、現在の行から、次の行、または現在の行に続く2番目の行、または現在の行に続く3番目の行などのデータにアクセスできます。
LEAD()
関数は、現在の行の値と次の行の値の差を計算するのに非常に役立ちます。
LEAD()
関数の構文は次のとおりです。
LEAD(return_value [,offset[, default ]]) OVER (
PARTITION BY expr1, expr2,...
ORDER BY expr1 [ASC | DESC], expr2,...
)
Code language: SQL (Structured Query Language) (sql)
LEAD(return_value, offset, default) OVER (PARTITION BY partition_expression ORDER BY sort_expression);
返り値: 現在の行からオフセットした次の行の値。
offset:
現在の行からデータにアクセスする行数(前方)。offset
は非負の整数である必要があります。offset
を指定しない場合、デフォルトは1です。
default:
offset
がパーティションの範囲を超えた場合、関数は default
を返します。default
を指定しない場合、NULL
が返されます。
PARTITION BY 句:
PARTITION BY
句は、結果セットの行を、LEAD()
関数が適用されるパーティションに分割します。PARTITION BY
句を指定しない場合、結果セット全体が単一のパーティションとして扱われます。
ORDER BY 句:
ORDER BY
句は、LEAD()
関数が適用される各パーティション内の行をソートします。
SQL LEAD() 関数の例
デモンストレーションの目的で、サンプルデータベースの employees
テーブルを使用します。
A) 結果セットに対する SQL LEAD() 関数の使用例
次のステートメントは、会社の各従業員について、直後に雇用された従業員の雇用日を返します。
SELECT
first_name,
last_name,
hire_date,
LEAD(hire_date, 1) OVER (
ORDER BY hire_date
) AS next_hired
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
以下に出力を示します。

この例では、PARTITION BY
句を省略したため、結果全体が単一のパーティションとして扱われました。ORDER BY
句は、従業員を雇用日で昇順にソートしました。LEAD()
関数は、結果セットの各行に適用されました。
B) パーティションに対する SQL LEAD() 関数の使用例
次のステートメントは、各従業員について、同じ部門で直後に雇用された従業員の雇用日を提供します。
SELECT
first_name,
last_name,
department_name,
hire_date,
LEAD(hire_date, 1, 'N/A') OVER (
PARTITION by department_name
ORDER BY hire_date
) AS next_hire_date
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
句を使用して各部門の従業員を雇用日で昇順にソートしました。LEAD()
関数は、ソートされた各パーティションに個別に適用され、各部門の従業員の次の雇用日を取得しました。
このチュートリアルでは、SQL LEAD()
関数を使用して、現在の行から前方行のデータにアクセスする方法を学習しました。