このチュートリアルでは、PostgreSQL の FIRST_VALUE()、LAST_VALUE()、Nth_VALUE() 関数を使用して、グループの最初の値、最後の値、n 番目の値を取得します。
PostgreSQLのこれらの関数は、テーブルの最初の値、最後の値、n番目の値を返すウィンドウ関数として知られています。
FIRST_VALUE:PARTITION BY 句で適用されたフィールドに基づいて、各グループの最初の値を返します。PARTITION BY が指定されていない場合、関数はクエリ結果セットのすべての行を単一のグループとして扱います。
LAST_VALUE:PARTITION BY 句に適用されたフィールドに基づいて、各グループの最後の値を返します。
NTH_VALUE:PARTITION BY 句に適用されたフィールドに基づいて、各グループの n 番目の値を返します。

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

FIRST_VALUE() 関数の例:
PostgreSQL の FIRST_VALUE() 関数は、各グループの最初の値を返します。
Select *, FIRST_VALUE(price) OVER(ORDER BY price) from basket;
価格列に基づいて最初の値が選択され、列として表示されます。結果のテーブルは次のようになります。
出力:

LAST_VALUE() 関数の例:
PostgreSQL の LAST_VALUE() 関数は、各グループの最後の値を返します。
Select *, LAST_VALUE(price) OVER(ORDER BY price) from basket;
価格列に基づいて、その最後の値が選択され、列として表示されます。結果のテーブルは次のようになります。
出力:

NTH_VALUE() 関数の例:
PostgreSQL の NTH_VALUE() 関数は、N を入力として受け取り、各グループの n 番目の値を返します。
Select *, NTH_VALUE(price,4) OVER(ORDER BY price RANGE BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING) from basket;
価格列に基づいて、4番目の値、つまり60が選択され、列として表示されます。キーワード「RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING」は、n番目の値が列全体に表示されるようにするためのものです。
結果の表は次のようになります
出力:

FIRST_VALUE()とpartition byの組み合わせPostgreSQLの場合:
PostgreSQLのpartition byと組み合わせたFIRST_VALUEは各グループの最初の値を返します。
select *, FIRST_VALUE (price) OVER (
PARTITION BY item_group
ORDER BY
price
) from Basket;
結果の表

LAST_VALUE()とpartition byの組み合わせPostgreSQLの場合:
PostgreSQLのpartition byとLAST_VALUE()は各グループの最後の値を返します。
select *, LAST_VALUE (price) OVER (
PARTITION BY item_group
ORDER BY
price RANGE BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING
) from Basket;
出力:

Nth_VALUE() と PostgreSQL の “partition by” の組み合わせ:
Nth_VALUE() は、partition by とともに各グループの n 番目の値を返します。NTH_VALUE() 関数は、列名と整数を引数として受け取ります。price は、各アイテム グループの 3 番目の値が見つかる列名です。
select *, nth_VALUE (price,3) OVER (
PARTITION BY item_group
ORDER BY
price RANGE BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING
) from Basket;
したがって、各グループの3番目の値を含む結果の表は次のようになります。
出力:
