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

Rah*_*ani 0 sql oracle

我想在叶子和当前日期的基础上识别根节点。

我有一个包含数据的表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 数据库。

xQb*_*ert 5

我没有测试过这个,但我相信你有一个操作顺序问题。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)