- 类别:
:doc:`/sql-reference/functions-window-syntax`(排名)
LAST_VALUE¶
返回一组有序值中的最后一个值。
- 另请参阅:
语法¶
有关 window_frame 语法的详细信息,请参阅 窗口函数的语法和用法。
实参¶
expr确定返回值的表达式。
expr1用于对行进行分区的表达式。您可以指定单个表达式或以逗号分隔的表达式列表。例如:
expr2用于对行进行排序的表达式。您可以指定单个表达式或以逗号分隔的表达式列表。例如:
{ IGNORE | RESPECT } NULLS当
expr包含 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指定窗口中计算函数的行子集。如果未指定窗口框架,则默认框架为整个窗口:ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING此类行为与 ANSI 标准 不同,后者为窗口框架指定了以下默认值:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
有关 window_frame 语法的详细信息,请参阅 窗口函数的语法和用法。
示例¶
第一个示例返回按 column1 分区的 column2 LAST_VALUE 结果:
以下示例返回三个相关函数的结果:FIRST_VALUE、NTH_VALUE 和 LAST_VALUE。
该查询创建一个三行宽的滑动窗口框架,其中包含:
当前行前面的行。
当前行。
当前行后面的行。
The
2in the callNTH_VALUE(menu_price_usd, 2)specifies the second row in the window frame (which, in this case, is also the current row).当前行是窗口框架中的第一行时,没有前面的行可以引用,因此 FIRST_VALUE 为该行返回 NULL。
框架边界有时会超出分区中的行,但不存在的行不包括在窗口函数计算中。例如,若当前行是分区中的第一行而窗口框架
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING,没有前一行可供引用,则 FIRST_VALUE 函数返回分区中第一行的值。鉴于表中的数据,所有三个函数的结果永远不匹配。这些函数为框架中的每行选择 第一个、最后一个 或 第 n 个 值,并且值的选择分别适用于每个分区。