我想在leaf的基础上确定根节点和当前日期。
我有一个带有数据
的表 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
获取我正在使用查询的根节点
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
但问题在于,你可以看到第二条记录并不满足条件。我正在获得输出
Output: E
哪个不正确我应该得到输出B
你能帮我解决一下吗?我在查询中做错了什么。 我正在使用Oracle数据库。答案 0 :(得分:4)
我没有对此进行过测试,但我相信您的操作有问题。遍历层次结构后发生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