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;
結果の表
出力:

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;
出力:

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なので、結果のテーブルは次のようになります。
出力:

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;
結果の表は次のようになります
出力:
