2012-07-09 47 views
0

我有2個表,其值存儲如下。更新來自兩個表值的sql查詢

表1

ReferranceID StatusNumber ServiceType   T2OpenDt   T1OpenDT 
162987   399519  Orthopaedic Surgery  NULL   2011-08-19 
162987   399525  Acupuncture    NULL   2011-08-19 
162987   413405  Anesthesiology   NULL   2011-09-28 
162987   517174  Chiropractic    NULL   2012-04-26 

表2

ReferranceID StatusNumber Status  T2OpenDate 
162987  256033   Closed  2010-11-17 
162987  488518   ReOpen  2012-02-22 

第一表應如下面從第二表進行更新。 (即,結果值)

ReferranceID StatusNumber ServiceType    T2OpenDt   T1OpenDT 
162987   399519  Orthopaedic Surgery  2010-11-17   2011-08-19 
162987   399525  Acupuncture    2010-11-17   2011-08-19 
162987   413405  Anesthesiology   2010-11-17   2011-09-28 
162987   517174  Chiropractic    2012-02-22   2012-04-26 

「2010-11-17」將在3行由於T2OpenDate更新小於T1Opendate和 有的2012-02-只有一個一次出現22由於此日期略大於其他3個頂級T1OpenDate且小於第4個T1OpenDate。

有沒有人可以爲我推薦上面的UPDATE sqlquery。非常感謝你幫助我。根據亞倫Bertrand的

的CommNet
+0

如果有表2中其他行對同一轉診?例如。該狀態已關閉並重新打開多次? – 2012-07-09 18:53:34

+0

可以有任何數量的狀態,如(關閉/打開/重新打開)。我們必須選擇應該小於T1OpenDate的日期的最大值。 – desi 2012-07-09 18:56:34

回答

0
UPDATE Table1 
    SET T2OpenDate = (SELECT MAX(Table2.T2OpenDate) 
         FROM Table2 
         WHERE Table2.T2OpenDate < Table1.T1OpenDate)      
FROM Table1 

EDITED

如果你想獲得更好的在這個特別的技能,我建議你閱讀本:How do I UPDATE from a SELECT in SQL Server?

+0

這並沒有給出第四行的正確答案。你可以通過在ORDER BY中添加DESC或者刪除它並將TOP 1改爲MAX來解決這個問題。 – 2012-07-09 19:00:53

+0

@AaronBertrand非常感謝您的評論,我編輯了我的答案,現在我認爲它的工作原理。 – daniloquio 2012-07-09 19:03:12

+0

感謝Daniloquio。我嘗試了您的查詢,並按照Aaron Bertrand的建議,我在腳本中添加了「DESC」命令,結果準確無誤。 非常感謝您提供的快速解決方案。 – desi 2012-07-09 19:10:38