#LAG
LAG为窗口函数。该函数根据窗口查询返回的一系列行和游标的位置,提供对位于该位置之前的给定物理偏移量处的行的访问,并返回该行记录对应expr的值。
窗口函数不可嵌套,因此expr为除窗口函数之外的其他通用表达式。
(RESPECT|IGNORE) NULLS
指定expr的空值是否被包括在函数的计算中,缺省为RESPECT NULLS。
offset
指定物理偏移量的表达式,须为除BIT外数值型数据,或可转换为NUMBER的其他类型数据。
offset为与expr相同的通用表达式,但不能为NULL。
offset可省略,则其默认值为1。
如果偏移量超出表的范围,则返回default定义的默认值。
default
指定按给定偏移量无法获取到行记录时,函数返回的默认值。
default为与expr相同的通用表达式,可省略,则默认值为NULL。
示例
--使用手册首页列示的area1表
SELECT * FROM area1;
AREA_NO AREA_NAME DHQ EMPLOYEE_COUNT
------- -------------------- --------------- --------------
01 华东 Shanghai
02 华西 Chengdu 300
03 华南 Guangzhou 400
04 华北 Beijing 300
05 华中 Wuhan
--返回AREA_NO排序上一行的EMPLOYEE_COUNT
SELECT LAG(employee_count) OVER(ORDER BY AREA_NO) lag1 FROM area1;
LAG1
-------------------
300
400
300
--返回AREA_NO排序上一个非空的的EMPLOYEE_COUNT
SELECT LAG(employee_count IGNORE NULLS) OVER(ORDER BY AREA_NO) lag2 FROM area1;
LAG2
-------------------
300
400
300
--返回AREA_NO排序上一个非空的的EMPLOYEE_COUNT,若为空则返回0
SELECT LAG(employee_count IGNORE NULLS,1,0) OVER(ORDER BY AREA_NO) lag3 FROM area1;
LAG3
-------------------
0
0
300
400
300
query_partition_clause|order_by_clause
窗口函数通用语法。
示例
--finance_info表记录了分年、月、机构的收入情况
SELECT year,month,branch,revenue_total FROM finance_info;
YEAR MONTH BRANCH REVENUE_TOTAL
----- ----- ------ -------------
2001 01 0201 2888
2021 01 0201 28888
2021 01 0101 38888
2021 02 0101 37778
--分年统计每一个机构每月和上月的收入对比情况
SELECT year,month,revenue_total curr_month,
LAG(revenue_total,1,0) OVER (PARTITION BY year ORDER BY year,month,branch) last_month
FROM finance_info;
YEAR MONTH CURR_MONTH LAST_MONTH
----- ----- ----------- -----------
2001 01 2888 0
2021 01 38888 0
2021 01 28888 38888
2021 02 37778 28888