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

 

posted @ 2023-02-01 15:12  wangrui1587165  阅读(97)  评论(0编辑  收藏  举报