我想在叶子和当前日期的基础上识别根节点。
我有一个包含数据的表tree_table
child_node parent_node start_date end_date
A B 1/1/2009 31/12/2050
B C 1/1/2009 31/12/2010
C D 1/1/2009 31/12/2050
D E 1/1/2009 31/12/2050
Run Code Online (Sandbox Code Playgroud)
获取根节点我正在使用查询
select parent_node from(
SELECT parent_node
FROM tree_table exp
where connect_by_isleaf = 1 and sysdate between start_date and end_Date
START WITH child_node = 'A'
CONNECT BY PRIOR parent_node = child_node order by rownum desc) where rownum=1
Run Code Online (Sandbox Code Playgroud)
但这里的问题是,如您所见,第二条记录不满足条件。我得到了输出
Output: E
Run Code Online (Sandbox Code Playgroud)
这是不正确的,我应该得到输出 B
你能帮我一下吗。我在查询中做错了什么。我正在使用 Oracle 数据库。
我没有测试过这个,但我相信你有一个操作顺序问题。where 子句出现在遍历层次结构之后;当我相信您希望日期条件成为层次结构遍历的一部分时。
我认为您希望日期检查作为连接的一部分发生,因此一旦遇到日期条件,它就会停止处理层次结构。
SELECT paren_node
FROM (SELECT parent_dode
FROM tree_table exp
WHERE connect_by_isleaf = 1
START WITH child_node = 'A'
CONNECT BY PRIOR pared_node = child_node
AND sysdate between start_date and end_Date
ORDER BY rownum desc)
WHERE rownum = 1
Run Code Online (Sandbox Code Playgroud)