SQL server – überprüfen Sie, ob Sätze von timebereichen einander überlappen

Ich habe zwei Tische mit timereihen, Wochen und Perioden: Wochen:

WeekID | StartDate | EndDate | 1 | 2017-01-01 | 2017-01-07 | 2 | 2017-01-08 | 2017-01-14 | 3 | 2017-01-15 | 2017-01-21 | 

und Perioden:

 PeriodID | StartDate | EndDate | 1 | 2016-12-01 | 2017-01-03 | 2 | 2017-01-20 | 2017-02-28 | 3 | 2017-03-15 | 2017-03-16 | 

Ich muss nur die datasätze in Tabelle Wochen haben, die einige gemeinsame Termine mit date reichen von Perioden Tabelle haben. Mit anderen Worten, ich muss aus Wochen löschen, wo die time zwischen StartDate und EndDate kein gemeinsames date mit einem der timeperioden aus der Periodentabelle hat. Irgendwelche Gedanken, wie man das macht?

Das Ergebnis Wochen Tabelle sollte sein:

 WeekID | StartDate | EndDate | 1 | 2017-01-01 | 2017-01-07 | 3 | 2017-01-15 | 2017-01-21 | 

Irgendwelche Gedanken dazu helfen.

Dies wird Weeks , die einen Period nicht überschneiden:

 select * from Weeks w where not exists ( select 1 from Weeks l inner join Periods r on l.EndDate >= r.StartDate and r.EndDate >= l.StartDate where w.WeekId = l.WeekId ) 

rextester demo: http://rextester.com/VYTEC19325

kehrt zurück:

 +--------+------------+------------+ | WeekId | StartDate | EndDate | +--------+------------+------------+ | 2 | 2017-01-08 | 2017-01-14 | +--------+------------+------------+ 

Um diese Weeks zu löschen, ändere bitte die Weeks select * zum delete .

Um nur zu wählen, die sich überschneiden Periods ändern not exists() exists() .