FIRST_VALUE ウィンドウ関数
順序付けられた行のセットとすると、FIRST_VALUE はウィンドウフレームの最初の行に関して指定された式の値を返します。
フレームの最後の行を選択する方法については、「LAST_VALUE ウィンドウ関数」を参照してください。
構文
FIRST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
引数
- expression
-
関数の対象となる列または式。
- IGNORE NULLS
-
このオプションが FIRST_VALUE で使用される場合、関数は NULL ではないフレームの最初の値 (値がすべて NULL の場合は NULL) を返します。
- RESPECT NULLS
-
Amazon Redshift は使用される行を決定するために null 値を含める必要があることを示します。IGNORE NULLS を指定しない場合、RESPECT NULLS はデフォルトでサポートされます。
- OVER
-
関数にウィンドウ句を導入します。
- PARTITION BY expr_list
-
1 つ以上の式で関数のウィンドウを定義します。
- ORDER BY order_list
-
各パーティション内の行をソートします。PARTITION BY 句が指定されていない場合、ORDER BY はテーブル全体をソートします。ORDER BY 句を指定する場合、frame_clause も指定する必要があります。
FIRST_VALUE 関数の結果は、データの並び順によって異なります。以下の場合、結果は不確定になります。
-
ORDER BY 句が指定されておらず、パーティションに式に使用する 2 つの異なる値が含まれる場合
-
式が ORDER BY リストの同じ値に対応する異なる値を検証する場合。
-
- frame_clause
-
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「ウィンドウ関数の構文の概要」を参照してください。
戻り型
これらの関数は、Amazon Redshift のプリミティブデータ型を使用する式をサポートします。戻り値の型は式のデータ型と同じです。
例
次の例では、サンプル TICKIT データの VENUE テーブルを使用します。詳細については、「サンプルデータベース」を参照してください。
次の例は、収容能力によって順序付けられた結果 (高から低) で、VENUE テーブルの各会場の座席数を返します。FIRST_VALUE 関数は、フレームの最初の行 (この場合、最高座席数の行) に対応する会場名を選択するために使用されます。結果は州によってパーティションで分割されるため、VENUESTATE 値が変更されると、新しい最初の値が選択されます。ウィンドウフレームはバインドされていないため、同じ最初の値が各パーティションの行ごとに選択されます。
カリフォルニアでは、Qualcomm Stadium
が最高座席数 (70561
) であるため、この名前は CA
パーティションのすべての行に対する最初の値です。
select venuestate, venueseats, venuename, first_value(venuename) over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venueseats >0) order by venuestate;
venuestate | venueseats | venuename | first_value -----------+------------+--------------------------------+------------------------------ CA | 70561 | Qualcomm Stadium | Qualcomm Stadium CA | 69843 | Monster Park | Qualcomm Stadium CA | 63026 | McAfee Coliseum | Qualcomm Stadium CA | 56000 | Dodger Stadium | Qualcomm Stadium CA | 45050 | Angel Stadium of Anaheim | Qualcomm Stadium CA | 42445 | PETCO Park | Qualcomm Stadium CA | 41503 | AT&T Park | Qualcomm Stadium CA | 22000 | Shoreline Amphitheatre | Qualcomm Stadium CO | 76125 | INVESCO Field | INVESCO Field CO | 50445 | Coors Field | INVESCO Field DC | 41888 | Nationals Park | Nationals Park FL | 74916 | Dolphin Stadium | Dolphin Stadium FL | 73800 | Jacksonville Municipal Stadium | Dolphin Stadium FL | 65647 | Raymond James Stadium | Dolphin Stadium FL | 36048 | Tropicana Field | Dolphin Stadium ...
次の例は、IGNORE NULLS オプションの使用方法と VENUE テーブルへの新しい行の追加への見込みを示します。
insert into venue values(2000,null,'Stanford','CA',90000);
この新しい行には、VENUENAME 行の NULL 値が含まれます。次に、以前にこのセクションで示した FIRST_VALUE クエリを繰り返します。
select venuestate, venueseats, venuename, first_value(venuename) over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venueseats >0) order by venuestate;
venuestate | venueseats | venuename | first_value -----------+------------+----------------------------+------------- CA | 90000 | NULL | NULL CA | 70561 | Qualcomm Stadium | NULL CA | 69843 | Monster Park | NULL ...
新しい行には最高値の VENUESEATS 値 (90000
) が含まれ、その VENUENAME は NULL となるため、FIRST_VALUE 関数は CA
パーティションに NULL を返します。関数式のこのような行を無視するには、IGNORE NULLS オプションを関数の引数に追加します。
select venuestate, venueseats, venuename, first_value(venuename) ignore nulls over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venuestate='CA') order by venuestate;
venuestate | venueseats | venuename | first_value ------------+------------+----------------------------+------------------ CA | 90000 | NULL | Qualcomm Stadium CA | 70561 | Qualcomm Stadium | Qualcomm Stadium CA | 69843 | Monster Park | Qualcomm Stadium ...