- カテゴリ:
ウィンドウ関数の構文と使用法 (ランキング)
FIRST_VALUE¶
値が順序付けられたグループ内の最初の値を返します。
- こちらもご参照ください。
構文¶
window_frame の構文の詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。
引数¶
expr戻り値を決定する式。
expr1行を分割するための式。単一の式または式のコンマ区切りリストを指定できます。例:
expr2行を並べ替える式。単一の式または式のコンマ区切りリストを指定できます。例:
{ IGNORE | RESPECT } NULLSexprに NULL の値が含まれている場合に、 NULL の値を無視するか尊重するかを指定します。IGNORE NULLSは NULL でない最初の値を返します。RESPECT NULLSは、式の最初の値であれば NULL を返します。
デフォルト:
RESPECT NULLS
使用上の注意¶
この関数はランク関連の関数であるため、ウィンドウを指定する必要があります。ウィンドウ句は、次のサブ句で構成されています。
PARTITION BY expr1副次句(オプション)。ORDER BY expr2サブ句(必須)。サポートされているその他の順序オプション(ソート順、 NULL 値の順序など)の詳細については、同じ規則に従う ORDER BY 句のドキュメントをご参照ください。window_frame副次句(オプション)。
ウィンドウ内の行の順序(したがってクエリの結果)は、 ORDER BY 句のキーによって各行が一意になる場合にのみ完全に決定論的です。次の例を考えてみましょう:
パーティションのいずれかに同一の列
oの値が含まれるか、大文字と小文字を区別しない比較で同一である場合、クエリ結果は異なる可能性があります。OVER 句内の ORDER BY 句は、クエリ全体の出力内にある行の順序ではなく、ウィンドウ内の行の順序のみを制御します。出力順序を制御するには、クエリの最も外側のレベルで別の ORDER BY 句を使用します。
オプションの
window_frameは、関数が計算されるウィンドウ内の行のサブセットを指定します。window_frameが指定されていない場合、デフォルトはウィンドウ全体です。ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGこれは、ウィンドウフレームに次のデフォルトを指定するANSI標準とは異なります。
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
window_frame の構文の詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。
例¶
この例は、FIRST_VALUE関数を使用して、各カテゴリで最も低いメニュー項目を検索するクエリを示しています。クエリには、2つのORDER BY句が含まれています。1つは各パーティションの行の順序を制御し、もう1つは完全なクエリの出力の順序をソートします。この例で使用されているテーブルを作成し、ロードするには、 menu_itemsテーブルを作成してロードする をご参照ください。
次の例では、 menu_items テーブルを使用して、 FIRST_VALUE 、 NTH_VALUE 、 LAST_VALUE の3つの関連する関数の比較も行っています。
クエリは次を含む3行幅のスライディングウィンドウフレームを作成します。
現在の行の前の行。
現在の行。
現在の行に続く行。
呼び出し
2のNTH_VALUE(menu_price_usd, 2)は、ウィンドウフレームの2番目の行(この場合は現在の行でもある)を指定します。現在の行がウィンドウフレームの最初の行である場合、参照する前の行がないため、 FIRST_VALUE はその行に対して NULL を返します。
フレームの境界がパーティションの行を超えることがありますが、存在しない行はウィンドウ関数の計算に含まれません。例えば、現在の行がパーティションの一番最初の行で、ウィンドウフレームが
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGの場合、リファレンスとなる前の行がないため、 FIRST_VALUE 関数はパーティションの最初の行の値を返します。テーブルのデータからすると、3つの関数すべてで結果が一致することはありません。これらの関数は、フレーム内の各行について、 最初の値、 最後の値、または n番目の値 を選択し、値の選択は各パーティションに個別に適用されます。
この例は、IGNORE NULLSおよびRESPECT NULLSの違いを示しています。サンプルデータには、コスト値がNULLである行が含まれています。デフォルトのRESPECT NULLSの動作では、順序付けられたパーティションの最初の行にNULL値がある場合、FIRST_VALUEはNULLを返します。IGNORE NULLSでは、FIRST_VALUEはNULL値をスキップし、最初の非NULL値を返します。