在 Oracle 中获取 parent 具有最深 children 路径(意味着更宏大 children)的记录

Get parent records which has deepest children path (means more grand children) in Oracle

我有按层次顺序存储的数据,我想按顺序查找所有 parents,其中最深的 children 在它下面(有 parent -> children -> grand children -> grand grand children...等),目前我使用 connect by 子句来获取所有 children(立即和扩展 children ..),但我需要获取所有 parent 具有最深 children 路径的 ID。

以下查询为我提供了 1501605 类别下的所有 children

select category_id, parent_id 
from CATEGORY 
start with CATEGORY_ID = 1501605 
connect by PARENT_ID = PRIOR CATEGORY_ID

分层查询中的深度称为level。如果您在级别上执行 rank(降序),您将获得树中与最深级别相关的所有节点。

select category_id, parent_id 
from (
    select category_id, parent_id, level, rank() over (order by level desc) as deepest
    from CATEGORY 
    start with CATEGORY_ID = 1501605 
    connect by PARENT_ID = PRIOR CATEGORY_ID
) where deepest = 1
;