2012-11-09 86 views
2

在Oracle的返回列表中的下行值,假設我有一個返回下面的列表中選擇查詢:獲取基於行

ID  Sequence# 
12  1 
15  3 
25  5 

我只知道在這種情況下,一些列的ID(我們假設12 ),我需要返回具有下一個序列號的行的ID(在本例中爲3)(id = 15)

我該怎麼做?我知道有一個Oracle功能lead,但我無法成功地阻止。

回答

1
SELECT * FROM table1 where ID in (SELECT min(ID) FROM table1 WHERE ID > 12) 
+0

這是個好主意,我用同樣的概念替換(1),但序列號,和我我需要什麼 – Victor

2

是的,您可以使用lead函數來獲取下一個值。這是一個如何完成的例子。

-- sample of data from your question 
SQL> with t1(ID, Sequence#) as 
    2 (
    3 select 12, 1 from dual union all 
    4 select 15, 3 from dual union all 
    5 select 25, 5 from dual 
    6 ) 
    7 select * 
    8 from (select id 
    9    , sequence# 
10    , lead(sequence#) over(order by id) next_sequence# 
11    , lead(id) over(order by id) next_id# 
12   from t1 
13  ) 
14 where id = 12 
15 ; 

     ID SEQUENCE# NEXT_SEQUENCE# NEXT_ID# 
---------- ---------- -------------- ---------- 
     12   1    3   15 
0
Select sequence from my_ table where id=(select min(id) from my_table where sequence> 1) 

與任何值以上的查詢,你正在尋找它的下一個