2016-02-18 76 views
0

因此,我一直在各种论坛和资源网站上对此进行了大量的阅读,但尚未找到找到我认为适用于我的案例的解决方案。另外,我不敢相信这证明有多难;我认为这种查询会相当普遍。Oracle中的嵌套子查询限制

基本上我在这里做的是通过联合查询两个历史表(tbl_b和tbl_c),以获得特定的里程碑日期 - 对于这个日期可能有多个结果...我然后希望找到最近的这些结果,使用最大值。此日期然后作为主查询中的列返回。

我的问题是,在第三层子查询中,我需要从顶部查询(tbl_a)中的表引用标识符值。

我知道相关的查询只能引用他们的父查询 - 所以,我卡住了。

编辑1 我正在寻找的目标日期很可能(但不一定)在结果集中是唯一的。这是数据记录的时间戳。我正在查找历史中与tbl_a中每列相关的最新条目。为此创建一个SQL小提琴。

见下面的示例:

select tbl_a.col_a, 
     tbl_a.col_b, 
    (
     select max(target_date) 
     from 
     (
      select tbl_b.target_date 
      from tbl_b 
      where tbl_b.tbl_a_id = tbl_a.id and 
        tbl_b.flag = 1 and 
        tbl_b.milestone_id = tbl_a.milestone_id 

      union 

      select tbl_c.target_date 
      from tbl_c 
      where tbl_c.tbl_a_id = tbl_a.id and 
        tbl_c.flag = 1 and 
        tbl_c.milestone_id = tbl_a.milestone_id 
     ) most_recent_target_date 
    ) 
from tbl_a 
+0

1)你能提供一个SQL小提琴(http://sqlfiddle.com/)用示例数据来说明你的问题? 2).target_date值是否唯一? – chabzjo

回答

0

转换此查询到一起,以这样的方式

select tbl_a.col_a, 
     tbl_a.col_b, 
     max(most_recent_target_date.target_date) 
from tbl_a 
join (
      select tbl_b.target_date, tbl_b.date_id 
      from tbl_b 
      where tbl_b.flag = 1 

      union all 

      select tbl_c.target_date, tbl_c.date_id 
      from tbl_c 
      where tbl_c.flag = 1 
) most_recent_target_date 
ON tbl_a.date_id = most_recent_target_date.date_id 
GROUP BY tbl_a.col_a, 
     tbl_a.col_b 
+0

谢谢,这个技巧 - 相当快速! –