更新时间:2025-01-22 GMT+08:00
last_value
last_value函数用于取当前行所对应窗口的最后一条数据的值。
使用限制
窗口函数的使用限制如下:
- 窗口函数只能出现在select语句中。
- 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
命令格式
last_value(<expr>[, <ignore_nulls>]) over ([partition_clause] [orderby_clause] [frame_clause])
参数说明
|
参数 |
是否必选 |
说明 |
|---|---|---|
|
expr |
是 |
待计算返回结果的表达式。 |
|
ignore_nulls |
否 |
BOOLEAN类型,表示是否忽略NULL值。默认值为False。 当参数的值为True时,返回窗口中第一条非NULL的值。 |
|
partition_clause |
否 |
指定分区。分区列的值相同的行被视为在同一个窗口内。 |
|
orderby_clause |
否 |
指定数据在一个窗口内如何排序。 |
|
frame_clause |
否 |
用于确定数据边界。 |
返回值说明
参数的数据类型。
示例代码
为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表logs,并添加数据,命令示例如下:
create table logs( cookieid string, createtime string, url string ) STORED AS parquet;
添加数据如下:
cookie1 2015-04-10 10:00:02 url2 cookie1 2015-04-10 10:00:00 url1 cookie1 2015-04-10 10:03:04 url3 cookie1 2015-04-10 10:50:05 url6 cookie1 2015-04-10 11:00:00 url7 cookie1 2015-04-10 10:10:00 url4 cookie1 2015-04-10 10:50:01 url5 cookie2 2015-04-10 10:00:02 url22 cookie2 2015-04-10 10:00:00 url11 cookie2 2015-04-10 10:03:04 url33 cookie2 2015-04-10 10:50:05 url66 cookie2 2015-04-10 11:00:00 url77 cookie2 2015-04-10 10:10:00 url44 cookie2 2015-04-10 10:50:01 url55
示例:将所有记录根据cookieid分组,并按createtime升序排列,返回每组中的最后一行数据。命令示例如下
SELECT cookieid, createtime, url,
LAST_VALUE(url) OVER(PARTITION BY cookieid ORDER BY createtime) AS last
FROM logs;
-- 返回结果:
cookieid createtime url last
cookie1 2015-04-10 10:00:00 url1 url1
cookie1 2015-04-10 10:00:02 url2 url2
cookie1 2015-04-10 10:03:04 url3 url3
cookie1 2015-04-10 10:10:00 url4 url4
cookie1 2015-04-10 10:50:01 url5 url5
cookie1 2015-04-10 10:50:05 url6 url6
cookie1 2015-04-10 11:00:00 url7 url7
cookie2 2015-04-10 10:00:00 url11 url11
cookie2 2015-04-10 10:00:02 url22 url22
cookie2 2015-04-10 10:03:04 url33 url33
cookie2 2015-04-10 10:10:00 url44 url44
cookie2 2015-04-10 10:50:01 url55 url55
cookie2 2015-04-10 10:50:05 url66 url66
cookie2 2015-04-10 11:00:00 url77 url77
截止到当前行的最后一个值,其实就是它本身。
父主题: 分析窗口函数