在oracle sql中比较当前行和上一行

Posted

技术标签:

【中文标题】在oracle sql中比较当前行和上一行【英文标题】:comparing current row and previous in oracle sql 【发布时间】:2015-05-04 11:08:13 【问题描述】:

我需要比较当前行和前一行,并且基于一些比较需要得出一个列值。目前我正在关注的方法是制作两个不同的记录集,然后使用排名函数,然后通过加入排名函数,我可以实现这一点。但是,这似乎是乏味的方法,有没有更好的方法来实现这一点。我目前正在编写如下查询:-

    select 
< comparing columns from two record sets and deriving column value> 
              (
        select(<some complex logic>, rank from a) rcdset, 
    (select <some complex logic>, rank +1 from a) rcdset2 where rcdset.rnk = rcdset1.rnk (+)

数据库 - Oracle 10g

【问题讨论】:

使用分析函数LAG/LEAD. 【参考方案1】:

使用LAG(value_expr) OVER (ORDER BY rank_col) 检索上一行的值(value_expr)(由rank_col 定义的顺序),请参阅http://oracle-base.com/articles/misc/lag-lead-analytic-functions.php

【讨论】:

以上是关于在oracle sql中比较当前行和上一行的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:将当前行和前两行的excel嵌套if条件转换为SQL

循环遍历 DataRow 以比较当前行数据和前一行数据

当前行和上一行之间具有特定值的窗口函数

从当前行和上一行计算 2 列

基于当前行和上一行的用户定义函数

当前行和上一行之间的秒数差异,并使用 google bigquery 将值存储在单独的列中