2011-10-29 188 views
0

我有兩個表D1和D2的SQL Server:查找日期範圍

DI有:

ID num startdate enddate  Status 
P10 B123 2002-01-01 2009-04-06 NULL 
P11 B124 2006-05-06 2008-07-01 NULL 
P12 B125 2010-05-05 2015-04-04 NULL 

D2有:(參考表)

ID num startdate enddate  
P10 B123 2010-01-01 2012-04-06 
P11 B124 2007-05-06 2010-07-01 
P12 B125 2007-05-05 2008-04-04 

現在,更新狀態中D1爲'失敗',如果在D2中具有相同的[num],則它具有重疊的日期範圍。日期範圍是enddate - startdate

因此,在D1中具有相同[num]的任何日期範圍不得接觸或存在於表D2的日期範圍內。

預期結果:

ID num startdate enddate  Status 
P10 B123 2002-01-01 2009-04-06 NULL 
P11 B124 2006-05-06 2008-07-01 FAIL 
P12 B125 2010-05-05 2015-04-04 NULL 

感謝

回答

2

試試這個:

Update D1 Set Status = 'Fail' 
    From D1 a 
    Where exists 
    (Select * From D2 b 
     Where b.num = a.num 
     And b.enddate >= a.startDate 
      And b.startDate <= a.enddate) 
+0

與[NUM]說ABC123我們有日期範圍在2004 - 2005年D1。因此,使用[num] ABC123,它可以允許2004年之前和2005年之後的任何日期範圍。如果日期範圍在2004-2005,則失敗 –