2017-05-24 38 views
-1

我對Oracle SQL相當陌生,所以請原諒,如果我的問題實際上有一個相對男生的答案。Oracle SQL查詢拉取數據並添加新創建的日期列

所以我有2個表,應用程序和Apps_history與下面的定義。

 Apps    Apps_history 
    ID     ID 
    Other    APP_ID 
    DATE_MODIFIED  STATUS 
         DATE_MODIFIED 

Apps_history已經APP_ID這是在應用程序的主鍵ID的外鍵,在應用程序記錄更新頻繁Apps_history保存了這條賽道。我想要一個新的列來顯示應用中的ID是否已創建,這可以從狀態等於'初始化'時從Apps_History中的列date_modified派生。

目前,這是我

select *, t.date_modified as create_date 
    (select app_history.date_modified 
    from apps 
    inner join app_history on 
    apps.id=app_history.app_id where 
    status='initialized') T 
    from apps; 

但我發現了一些錯誤,任何幫助輕推我朝着正確的方向是非常讚賞,

感謝

回答

1

有多種方法來完成這一點。你似乎已經開始下降相關子查詢的道路,所以繼續指出:

select a.*, 
     (select ah.date_modified 
     from app_history ah 
     where a.id = ah.app_id and ah.status = 'initialized') 
     ) as created_date 
from apps a; 

出於性能考慮,我建議在app_history(app_id, status, date_modified)的索引。

+0

工作就像一個魅力,非常感謝戈登 – DPEZ

0

您的子查詢不相關。您可以使用@Gordon建議的相關查詢來解決此問題。此外,如果您從關聯的子查詢中獲取多行但它是可修復的,則會引發錯誤。

我會爲此使用左自加入。

select a.*, 
    t.date_modified as create_date 
from apps a 
left join apps t on a.id = t.app_id 
    and t.status = 'initialized';