#LAG

lag
LAG ( expr RESPECT IGNORE NULLS , offset , default ) OVER ( query_partition_clause order_by_clause )

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 
pdf-btn 下载文档
copy-btn 复制链接