簡體   English   中英

Oracle Connect按頂部/底部層次結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM