
# 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   | 否    | 指定数据在一个窗口内如何排序。                                                                                              |
   
#### 返回值说明
参数的数据类型。
#### 示例
**示例数据**
为便于理解函数的使用方法，本文为您提供源数据，基于源数据提供函数相关示例。创建表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升序排列，返回窗口内往下第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
```
