本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
FIRST_ VALUE 視窗功能
指定一組有序的資料列,FIRST_ 會VALUE傳回指定運算式相對於視窗框架中第一列的值。
如需有關選取視窗框中最後一列的資訊,請參閱LAST_ VALUE 視窗功能。
語法
FIRST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
引數
- 運算式
-
函數運算的目標欄或表達式。
- IGNORE NULLS
-
當此選項與 FIRST _ 一起使用時VALUE,函數會傳回框架中不是的第一個值 NULL (或者NULL如果所有值都是NULL)。
- RESPECT NULLS
-
指出 Amazon Redshift 應該包含 null 值來決定要使用的列。RESPECTNULLS如果您未指定,則依預設支援IGNORENULLS。
- OVER
-
引進函數的視窗子句。
- PARTITION通過表達式列表
-
以一或多個表達式定義函數的視窗。
- ORDER按訂單列表
-
排序每一個分割區內的列。如果沒有指定 PARTITION BY 子句,ORDERBY 排序整個表。如果您指定 ORDER BY 子句,則還必須指定 Frame_ 子句。
FIRST_ VALUE 函數的結果取決於數據的順序。在下列情況中,結果不確定:
-
當未指定 ORDER BY 子句且分區包含兩個不同的表達式值時
-
當運算式評估為對應於 ORDER BY 清單中相同值的不同值時。
-
- frame_clause
-
如果 ORDER BY 子句用於聚合函數,則需要明確的 frame 子句。窗框子句在排序的結果中包含或排除資料列組,以調整函數視窗中的一個列集。框架子句由關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 ...
下列範例會示範IGNORENULLS選項的使用方式,並依賴新資料列新增至資料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 函式會傳回NULLCA
磁碟分割。要在函數評估中忽略這樣的行,請將選IGNORENULLS項添加到函數參數中:
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 ...