根据当前日期从Oracle中的leaf获取根节点

时间:2018-02-20 15:14:05

标签: sql oracle

我想在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数据库。

1 个答案:

答案 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