2017-08-15 69 views
2

我有一個查詢,忽略從以前的值增加的值。例如採取如下表:oracle滯後函數與組

col1 col2 col3 
5  1  A 
4  2  A 
6  3  A 
9  4  B 
8  5  B 
10  6  B 

現在採取以下查詢:

select col1 
from (select col1, lag(col1) over (order by col2) as prev_value 
    from test 
) 
where prev_value is null or prev_value > col1; 

現在查詢工作正常,因爲它忽略列的事實,其中COL1 = 6,9和10,因爲以前價值較低。現在我試圖解決的問題是它在一個組的基礎上做到這一點。所以我只希望它忽略由col3分組的先前值。所以我想6和10忽略,但不是9,因爲當按col3分組9時不會有以前的值。

任何幫助,將不勝感激

回答

4

我覺得你只是想partition by

select col1 
from (select col1, lag(col1) over (partition by col3 order by col2) as prev_value 
     from test 
    ) 
where prev_value is null or prev_value > col1; 
+0

你確實是Oracle主。幾分鐘後會在這裏接受 – Maxqueue