LEAD() 関数は、テーブル内の次の行と前の行の値を返します。LAG() 関数は、PostgreSQL テーブル内の前の行の値を返します。これらの関数を使用すると、SELF JOIN を使用せずに後続の行のデータにアクセスできます。LEAD() および LAG() 関数は、PARTITION BY とともに、テーブル内のグループの次の行と前の行を取得します。

PostgreSQL の LEAD() 関数:LEAD()関数は、テーブルの次の行の値を返します。
PostgreSQL の LAG() 関数:LAG()関数はテーブルの前の行の値を返します。

描写に使用したテーブルBASKETを以下に示します。

LEAD() 関数の構文:

LEAD(column, offset, default) OVER ([PARTITION BY expression] ORDER BY expression)

column: 値を取得する列。

offset(オプション): 値を取得する現在の行から前方の行数。デフォルトは 1 です。

default(オプション): リード操作が結果セットの末尾を超えた場合に返される値。デフォルトはNULL。

PARTITION BY(オプション): 結果セットを、関数が適用されるパーティションに分割します。

ORDER BY: 各パーティション内の行の順序を指定します。

描写に使用したテーブルBASKETを以下に示します。


PostgreSQL の LEAD():

LEAD 1の例:

PostgreSQLのLEADはテーブルの次の行を返します。LEAD()関数は列名とリード値を引数として受け取ります。

SELECT *,LEAD (price,1) OVER (ORDER BY price) AS next_price
FROM basket;

結果の表

出力:

PostgreSQL の LEAD() および LAG() 関数 2

PARTITION BY による LEAD:

PostgreSQLのPARTITION BYを使用したLEADは、グループ内の次の行を返します。

SELECT *,LEAD (price,1) OVER (PARTITION BY ITEM_GROUP ORDER BY price) AS groups_next_price
FROM basket;

出力:

PostgreSQL の LEAD() および LAG() 関数 3

LAG() 関数の構文:

LAG(column, offset, default) OVER ([PARTITION BY expression] ORDER BY expression)

column: 値を取得する列。

offset(オプション): 値を取得する現在の行から遡る行数。デフォルトは 1 です。

default(オプション): ラグ操作が結果セットの先頭を超えた場合に返される値。デフォルトはNULL。

PARTITION BY(オプション): 結果セットを、関数が適用されるパーティションに分割します。

ORDER BY: 各パーティション内の行の順序を指定します。


PostgreSQL の LAG():

PostgreSQLのLAGはテーブルの前の行を返します

SELECT *,LAG (price,1) OVER (ORDER BY price) AS previous_price
FROM basket;

上記のコードではラグは1なので、結果のテーブルは次のようになります。

出力:

PostgreSQL の LEAD() および LAG() 関数 4

PARTITION BY を使用した LAG

PostgreSQLのPARTITION BYを使用したLAGは、グループ内の前の行を返します。

SELECT *,LAG (price,1) OVER (PARTITION BY ITEM_GROUP ORDER BY price) AS 
groups_previous_price FROM basket;

結果の表は次のようになります

出力:

PostgreSQL の LEAD() および LAG() 関数 5