Oracle 获取相邻两条记录的值 lead over 和 lag over(案例:计算相邻两条记录的差值)

Posted catoop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 获取相邻两条记录的值 lead over 和 lag over(案例:计算相邻两条记录的差值)相关的知识,希望对你有一定的参考价值。

有如下原始表数据,现需要根据Id列,将相邻两条记录差值小于等于4的记录查询出来。

数据库:Oracle
使用Oracle的分析函数 lead over 和 lag over,最终 SQL 如下:

select t2.*
  from (select t1.id,
               t1.firstname,
               t1.lastname,
               (case t1.prev_val
                 when null then
                  null
                 else
                  t1.id - t1.prev_val
               end) as prev_diff,
               (case t1.next_val
                 when null then
                  null
                 else
                  t1.next_val - t1.id
               end) as next_diff
          from (select t.id,
                       t.firstname,
                       t.lastname,
                       lag(t.id) over(order by t.id asc) as prev_val,
                       lead(t.id) over(order by t.id asc) as next_val
                  from SHANHY_REACTOR_EXAMPLE_CUSTOMER t) t1) t2
                  where t2.prev_diff <= 4 or t2.next_diff <= 4;

SQL 执行结果如下:


(END)

以上是关于Oracle 获取相邻两条记录的值 lead over 和 lag over(案例:计算相邻两条记录的差值)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 选择查询不获取值为空的记录

ORACLE 查询某条数据的相邻两条数据(注ID可能是不连续的)

lag与lead函数 oracle_11g

从 Oracle 中选择最新的两条不同记录

oracle 查询每组的最大值

oracle lag与lead分析函数简介