[英]Oracle Connect By top/bottom hierarchy
如何使用connect by獲取層次結構的頂部和底部,我有一個存儲id之間轉換的表(ID-> REPLACE_ID),我有興趣從任何id獲取最新的id。
--drop table test_connect_by;
create table test_connect_by(ID number, REPLACE_ID NUMBER);
insert into test_connect_by values(1,2);
insert into test_connect_by values(2,3);
insert into test_connect_by values(3,4);
insert into test_connect_by values(51,52);
insert into test_connect_by values(52,53);
insert into test_connect_by values(53,54);
insert into test_connect_by values(55,55);
SELECT id,replace_id, level
FROM test_connect_by
START WITH ID in (1,51)
CONNECT BY PRIOR replace_id = id;
我有興趣從1-4和51-54獲得轉換,或者我可以從2開始並獲得2-4。 有什么我可以分組來識別以1開頭的組和以51開頭的組嗎?
未經測試,因此可能存在一些錯誤:
select id, replace_id
from (
SELECT CONNECT_BY_ROOT id as id, replace_id
, row_number() over (partition by CONNECT_BY_ROOT id order by level desc) as rn
FROM test_connect_by
START WITH ID in (1,51)
CONNECT BY PRIOR replace_id = id
) as T
where rn = 1
作為一種(更直接)的方法,您可以通過connect_by_root()
值找到最低id
和最高replace_id
分組,如果replace_id
總是保證大於id
,否則請參閱Lennart回答 :
select min(id) as begins
, max(replace_id) as ends
from test_connect_by
start with id in (1, 51)
connect by id = prior replace_id
group by connect_by_root(id)
結果:
BEGINS ENDS
---------- ----------
1 4
51 54
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.