本文介绍GBase 8a的窗口函数LEAD、LAG的使用方法和样例。
目录导航
参考
语法
LEAD/LAG(expr [,offset [,DEFAULT]] ) OVER([PARTITION BY col_name1,col_name2,…] ORDER BY col_name1 [ASC/DESC], col_name2 [ASC/DESC],…)
说明
LEAD 超前,也就是后面的新数据,LAG 滞后,也就是以前的旧数据。
- expr:此参数是求偏移量的表达式。
- offset:此参数是偏移量,可以省略,默认值是 1。
- default:此参数是缺省值,可以省略,默认值是 NULL。
- 这两个函数 OVER 里面的规则同 RANK 类 OLAP 函数一样。
- 该函数可以返回任何支持的数据类型。
参数2和参数3必须是常量或常量表达式。第一个参数与第三个参数的数据类型不同时,第三个参数会根据第一个参数的数据类型做隐式转换。
样例
lead样例
获取的是后面新的数据,默认是后1行。通过第2个参数,指定后面第几行,例子中是后面第2行。 如果后面没有了,默认返回null, 通过第3个参数,替换这个null值。
select t2.*,lead(val) over(order by val) v from t2; | select t2.*,lead(val,2) over(order by val) v from t2; | select t2.*,lead(val,2,-1) over(order by val) v from t2; |
+------+------+------+------+ | +------+------+------+------+ | +------+------+------+------+ |
LAG样例
和LEAD类似,只是找的是前面出现过的旧数据。参数也一样。
select t2.*,lag(val) over(order by val) v from t2; | select t2.*,lag(val,2) over(order by val) v from t2; | select t2.*,lag(val,2,-1) over(order by val) v from t2; |
+------+------+------+------+ | +------+------+------+------+ | +------+------+------+------+ |
带PARTITION的LEAD和LAG样例
每个partition各自计算。
gbase> select t2.*,lead(val) over(partition by type order by val) v from t2;
+------+------+------+------+
| id | type | val | v |
+------+------+------+------+
| 4 | 2 | 222 | 233 |
| 5 | 2 | 233 | 244 |
| 6 | 2 | 244 | NULL |
| 1 | 1 | 111 | 122 |
| 2 | 1 | 122 | 133 |
| 3 | 1 | 133 | NULL |
| 7 | 3 | 333 | NULL |
+------+------+------+------+
7 rows in set (Elapsed: 00:00:00.06)
gbase> select t2.*,lag(val) over(partition by type order by val) v from t2;
+------+------+------+------+
| id | type | val | v |
+------+------+------+------+
| 4 | 2 | 222 | NULL |
| 5 | 2 | 233 | 222 |
| 6 | 2 | 244 | 233 |
| 1 | 1 | 111 | NULL |
| 2 | 1 | 122 | 111 |
| 3 | 1 | 133 | 122 |
| 7 | 3 | 333 | NULL |
+------+------+------+------+
7 rows in set (Elapsed: 00:00:00.05)