我有一张表A
作为傻瓜:
id name nextid orderset
19 done 4
21 init 27 1
24 sent-req 19 3
27 offer-req 24 2
orderset
列为我提供了状态的顺序:init -> offer-req -> sent-req -> done
我需要编写一个查询,对于给定的id
,它会给出下一个状态的id
。
这应该很简单:
select id
from A
where orderset= (select orderset+1 from A where id=Any_Given_ID)
除了最后一个ID之外的所有情况都适用...因为id=19
旁边没有,在最后一个的情况下我希望查询返回0
。
我想与Max(orderset)
和select order+1 from A where id=Any_Given_ID
进行检查,但我似乎无法使其正常运作。
在查询中是可行还是我必须为此操作编写函数?
答案 0 :(得分:2)
假设订单是连续的,只需使用lead()
:
select id
from (select coalesce(lead(id) over (order by orderset), 0) as id
from A
) a
where id = Any_Given_ID;
您还可以将方法与聚合一起使用。这可以保证返回一行:
select coalesce(max(id), 0)
from A
where orderset = (select orderset + 1 from A where id = Any_Given_ID);