2011-10-29 4 views
0

j'ai deux tables D1 et D2SQL Server: Trouver la plage de dates

DI a:

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 a: (tableau de référence)

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 

Maintenant, la mise à jour statut D1 comme 'échoue' si pour la même [num] dans D2, il a une plage de dates qui se chevauchent. La plage de dates est enddate - startdate.

Donc, toute plage de dates dans D1 avec le même [num] ne doit pas toucher ou exister dans les plages de dates du tableau D2.

Résultat attendu:

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 

Merci

Répondre

2

Essayez ceci:

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

dire avec [num] ABC123 nous avons la plage de dates en 2004-2005 dans D1. Donc, avec [num] ABC123, il peut autoriser n'importe quelle date avant 2004 et après 2005. Échec si la période est en 2004-2005 –