SQL 方言通

首页 / 窗口

LAST_VALUE 窗口最后一个值

LAST_VALUE 返回窗口中最后一行的值。七个引擎都同名可用,差异在“忽略 NULL”的写法:MaxCompute、Doris、Hive 和 Spark 传第二个布尔参数,StarRocks 用 IGNORE NULLS,Hologres 和 Flink 的文档没有对应写法。LAST_VALUE 还要注意默认窗口只到当前行。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持LAST_VALUE(expr[, ignore_nulls]) OVER (...)ignore_nulls 默认为 False,为 True 时返回窗口中最后一个非 NULL 值。带与不带 ORDER BY 时窗口范围不同。官方文档
Hologres支持LAST_VALUE(value) OVER (...)Hologres V1.1.71 起由 HQE 引擎支持。文档没有提供忽略 NULL 的参数。官方文档
StarRocks支持LAST_VALUE(expr [IGNORE NULLS]) OVER (...)IGNORE NULLS 2.5.0 起支持,默认包含 NULL。3.5 起支持 ARRAY 类型。默认窗口是 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。官方文档
Doris支持LAST_VALUE(expr[, ignore_null]) OVER (...)ignore_null 为 true 时忽略 NULL,返回最后一个非 NULL 值。官方文档
Hive支持last_value(col[, skip_nulls]) OVER (...)最多两个参数,第二个参数默认为 false,设为 true 时跳过 NULL。官方文档
Spark SQL支持last_value(expr[, isIgnoreNull]) OVER (...)Spark 2.0.0 起提供。isIgnoreNull 为 true 时只返回非 NULL 值。文档说明结果依赖行的顺序。官方文档
Flink SQL支持LAST_VALUE(expression)文档中列为聚合函数,返回有序集合中最后一个值,没有忽略 NULL 的参数。官方文档

迁移注意事项

示例

取每个用户最近一次出现的非空渠道

MaxCompute
SELECT user_id, LAST_VALUE(channel, true) OVER (PARTITION BY user_id ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS ch FROM events;
Hologres
SELECT user_id, LAST_VALUE(channel) OVER (PARTITION BY user_id ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS ch FROM events;
StarRocks
SELECT user_id, LAST_VALUE(channel IGNORE NULLS) OVER (PARTITION BY user_id ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS ch FROM events;
Doris
SELECT user_id, LAST_VALUE(channel, true) OVER (PARTITION BY user_id ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS ch FROM events;
Hive
SELECT user_id, last_value(channel, true) OVER (PARTITION BY user_id ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS ch FROM events;
Spark SQL
SELECT user_id, last_value(channel, true) OVER (PARTITION BY user_id ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS ch FROM events;

同类函数

核对日期: · 提交勘误