ソース テーブル (T1) があります。
ID1 | ID2
----------
1 | 2
1 | 5
4 | 7
7 | 8
9 | 1
データをこれに変換したい(T2):
ID1 | ID2 | LABEL
------------------
1 | 2 | 1
1 | 5 | 1
4 | 7 | 2
7 | 8 | 2
9 | 1 | 1
PostgreSQLでこれに対する解決策を見つけました:
with
recursive cte(id1, id2) as (
select id1, id2, 1 as level
from t
union all
select t.id1, cte.id2, cte.level + 1
from t join
cte
on t.id2 = cte.id1
)
select id1, id2,
dense_rank() over (order by grp) as label
from (select id1, id2,
least(min(id2) over (partition by id1), min(id1) over (partition by id2)) as grp,
level
from cte
) t
where level = 1;
このコードを Oracle に変換したいと考えています。このコードを Postgres から Oracle に変換するにはどうすればよいですか?