根据返回的行列表获取下一行值

时间:2012-11-09 16:45:29

标签: sql oracle plsql

在Oracle中,假设我有一个返回以下列表的查询:

ID     Sequence#
12        1
15        3
25        5

在这种情况下,我所知道的是某行的ID(假设为12),我需要返回具有下一个序列号的行的ID,在这种情况下为3(id = 15)

我该怎么办?我知道有一个Oracle函数lead,但我无法成功阻止它。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

Select sequence from my_ table where id=(select min(id) from my_table where sequence> 1)

将上述查询中的(1)替换为您要搜索其下一个

的任何值