All*_*wis 6 oracle oracle-11g-r2
我在 Oracle 11gR2 中有一个分层查询,它返回如下内容:
我想编写的查询应该获取与某个谓词匹配的所有行,对于最低级别;即最接近父母。例如,如果其中一个子行与谓词匹配,则它应该只返回该行,而不管是否有任何孙子行匹配。如果多个子行匹配,它应该返回所有子行,同样不管孙行。如果没有子行匹配,它应该返回任何匹配的孙行,等等(在实际系统中,我有不止三个级别,每个级别还有更多行。)
我认为这可以通过分析函数实现,但我不确定使用哪个,或者如何将它集成到我的查询中。我已经看到使用 解决了类似的问题min (level) keep (dense_rank last order by level)
,但这似乎并不是我想要的。
如果您有一个在根节点下生成整个树的分层查询,并且还level
计算了一列,则可以将其包装在派生表或 cte 中并使用窗口聚合:
WITH query AS
( SELECT <columns list>, level
-- your query here
) ,
cte AS
( SELECT <columns list>, level,
MIN(the_level) OVER () AS min_level
FROM query
WHERE <conditions>
)
SELECT *
FROM cte
WHERE min_level = level ;
Run Code Online (Sandbox Code Playgroud)