SQL LEAD

概要: このチュートリアルでは、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)

以下に出力を示します。

SQL LEAD function Over Result Set Example

この例では、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)

次の図は、部分的な出力を示しています。

SQL LEAD function Over Partition Example

この例では、PARTITION BY 句を使用して従業員を部門別にパーティションに分割し、ORDER BY 句を使用して各部門の従業員を雇用日で昇順にソートしました。LEAD() 関数は、ソートされた各パーティションに個別に適用され、各部門の従業員の次の雇用日を取得しました。

このチュートリアルでは、SQL LEAD() 関数を使用して、現在の行から前方行のデータにアクセスする方法を学習しました。

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