本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
第一个窗口功能
给定一组有序的行,FIRST 返回指定表达式相对于窗口框架中第一行的值。
有关选择框架中最后一行的信息,请参阅 最后一个窗口函数。
语法
FIRST( expression )[ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
参数
- expression
-
对其执行函数的目标列或表达式。
- IGNORE NULLS
-
当此选项与 FIRST 一起使用时,该函数返回框架中第一个不是 NULL 的值(如果所有值都为 NULL,则返回 NULL)。
- RESPECT NULLS
-
表示在确定 AWS Clean Rooms 要使用哪一行时应包含空值。如果您未指定 IGNORE NULLS,则默认情况下不支持 RESPECT NULLS。
- OVER
-
引入函数的窗口子句。
- PARTITION BY expr_list
-
依据一个或多个表达式定义函数的窗口。
- ORDER BY order_list
-
对每个分区中的行进行排序。如果未指定 PARTITION BY 子句,则 ORDER BY 对整个表进行排序。如果指定 ORDER BY 子句,则还必须指定 frame_clause。
FIRST 函数的结果取决于数据的排序。在以下情况下,结果是不确定的:
-
当未指定 ORDER BY 子句且一个分区包含一个表达式的两个不同的值时
-
当表达式的计算结果为对应于 ORDER BY 列表中同一值的不同值时。
-
- frame_clause
-
如果 ORDER BY 子句用于聚合函数,则需要显式框架子句。框架子句优化函数窗口中的行集,包含或排除已排序结果中的行集。框架子句包括 ROWS 关键字和关联的说明符。请参阅窗口函数语法摘要。
返回类型
这些函数支持使用原始 AWS Clean Rooms 数据类型的表达式。返回类型与 expression 的数据类型相同。
示例
以下示例返回 VENUE 表中每个场地的座位数,同时按容量对结果进行排序(从高到低)。FIRST 函数用于选择与框架中第一行相对应的场地名称:在本例中为座位数最多的那一排。按州对结果进行分区,以便当 VENUESTATE 值发生更改时,会选择一个新的第一个值。窗口框架是无界的,因此为每个分区中的每个行选择相同的第一个值。
对于加利福利亚,Qualcomm Stadium
具有最大座位数 (70561
),此名称是 CA
分区中所有行的第一个值。
select venuestate, venueseats, venuename, first(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 -----------+------------+--------------------------------+------------------------------ 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 ...