Oracle 分析函数 排名 lag lead
语法格式
1. lag(column1, N, "xxxx") over(partition by column2 order by column3)
在查询中取出同一字段的前N行作为独立的列。
按照column2进行分组并且根据column3进行排序,取column1的前N(往前数第N行)的列值,如果为空用xxxx替换。
2. lead(column1, N, "xxxx") over (partion by column2 order by column3)
在查询中取出同一字段的后N行的数据作为独立的列。
按照column2进行分组并且根据column3进行排序,取column1的后N(往后数第N行)的列值,如果为空用xxxx替换。
用法
在数据规范的情况下,这两个函数可以用来统计环比/同比。比如某表的销售数据是按照月份规范排列,不存在多了或者少了的情况,就可以按照用这两个函数统计环比/同比,这种情况很少,一般情况下,数据会存在一些问题,所以会使用连接的方式实现。
1. 例如:lag默认查询往前数第1行,为空则显示为空。
select b.*, lag(b.num) over (order by b.operdate) from b;
查询结果为
2. 例如:lead默认查询往后数第1行,为空则显示为空。
select b.*, lead(b.num) over (order by b.operdate) from b;
查询结果为
3. 例如:lead查询往后数第2行。
select b.*, lead(b.num, 2) over (order by b.operdate) from b;
查询结果为
4. 例如:lead查询往后数第1行,如果为空则显示5.
select b.*, lead(b.num, 1, 5) over (order by b.operdate) from b;
查询结果为
参考CSDN:https://blog.csdn.net/z69183787/article/details/127532195