簡體   English   中英

比較 oracle sql 中的當前行和下一行

[英]Comparing current row and next row in oracle sql

我需要比較當前行和下一行,並且基於一些比較需要得出一個列值。 目前我正在遵循的方法是制作兩個不同的記錄集,然后使用等級 function ,然后通過加入等級函數,我可以實現這一點。 但是,這似乎是一種乏味的方法,有沒有更好的方法來實現這一點。 我目前正在編寫如下查詢:

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 (+)

這個查詢當前行需要與表中除前一行之外的所有其他行進行比較,我該怎么做?

你的問題很模糊,但你可以簡單地使用lead()

select a.*,
       lead(col) over (order by <ordering col>) as next_col_value
from a;

您可以合並case邏輯進行比較。

在這種情況下,遞歸子查詢分解子句又名 CTE 或 WITH 子句通常會有所幫助,因為 oracle 優化器可以決定“實現”您的子查詢,它可以減少額外的 io 和計算。

例如:

with hard_view as (
select ... 
from ...
)
select *
from hard_view v1,
     hard_view v2
where v1.rnk = v2.rnk+1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM