2016-02-18 78 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

謝謝,這個技巧 - 相當快速! –