lead
lead函数用于用于统计窗口内往下第n行值。
使用限制
窗口函数的使用限制如下:
- 窗口函数只能出现在select语句中。
- 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
命令格式
lead(<expr>[, bigint <offset>[, <default>]]) over([partition_clause] orderby_clause)
参数说明
参数 |
是否必选 |
说明 |
---|---|---|
expr |
是 |
待计算返回结果的表达式。 |
offset |
否 |
偏移量,BIGINT类型常量,取值大于等于0。值为0时表示当前行,为1时表示前一行,以此类推。默认值为1。输入值为STRING类型、DOUBLE类型则隐式转换为BIGINT类型后进行运算。 |
default |
是 |
常量,默认值为NULL。 当offset指定的范围越界时的缺省值,需要与expr对应的数据类型相同。如果expr非常量,则基于当前行进行求值。 |
partition_clause |
否 |
指定分区。分区列的值相同的行被视为在同一个窗口内。 |
orderby_clause |
否 |
指定数据在一个窗口内如何排序。 |
返回值说明
参数的数据类型。
示例代码
示例数据
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升序排列,返回窗口内往下第2行和第1行的值。命令示例如下
SELECT cookieid, createtime, url, LEAD(createtime, 2) OVER(PARTITION BY cookieid ORDER BY createtime) AS next_2_time, LEAD(createtime, 1, '1970-01-01 00:00:00') OVER(PARTITION BY cookieid ORDER BY createtime) AS next_1_time FROM logs; -- 返回结果: cookieid createtime url next_2_time next_1_time cookie1 2015-04-10 10:00:00 url1 2015-04-10 10:03:04 2015-04-10 10:00:02 cookie1 2015-04-10 10:00:02 url2 2015-04-10 10:10:00 2015-04-10 10:03:04 cookie1 2015-04-10 10:03:04 url3 2015-04-10 10:50:01 2015-04-10 10:10:00 cookie1 2015-04-10 10:10:00 url4 2015-04-10 10:50:05 2015-04-10 10:50:01 cookie1 2015-04-10 10:50:01 url5 2015-04-10 11:00:00 2015-04-10 10:50:05 cookie1 2015-04-10 10:50:05 url6 NULL 2015-04-10 11:00:00 cookie1 2015-04-10 11:00:00 url7 NULL 1970-01-01 00:00:00 cookie2 2015-04-10 10:00:00 url11 2015-04-10 10:03:04 2015-04-10 10:00:02 cookie2 2015-04-10 10:00:02 url22 2015-04-10 10:10:00 2015-04-10 10:03:04 cookie2 2015-04-10 10:03:04 url33 2015-04-10 10:50:01 2015-04-10 10:10:00 cookie2 2015-04-10 10:10:00 url44 2015-04-10 10:50:05 2015-04-10 10:50:01 cookie2 2015-04-10 10:50:01 url55 2015-04-10 11:00:00 2015-04-10 10:50:05 cookie2 2015-04-10 10:50:05 url66 NULL 2015-04-10 11:00:00 cookie2 2015-04-10 11:00:00 url77 NULL 1970-01-01 00:00:00