2015-09-09 45 views
0

我正在試圖找到一種方法來加入下面的行中的表的行。不知道這是否是一件事,但我想問。在SQL Server中加入下面的行

Table A 
Name StartDate EndDate 
A 01/01/15 01/12/2015 
B 31/01/15 01/03/2015 
C 01/04/15 01/08/2015 
D 21/07/15 01/05/2015 

我想得到在日期中重疊的人。從這個例子中,A與B,C和D重疊,然後我需要AB,AC和AD,但也想忽略BA,CA和DA。

So the output from Table A should be: 
A B 
A C 
A D 
B D 
C D 

現在,我加入到自己的表中,但無法擺脫重複,即我的結果中同時包含AB和BA。任何幫助將非常感激。提前致謝。

回答

6

只需添加一個額外的條件的比較:

select a.name, a2.name 
from a a join 
    a a2 
    on a.startdate <= a2.enddate and 
     a.enddate >= a2.startdate and 
     a.name < a2.name; 

兩個日期範圍重疊時,第二端部之前,首先啓動,並且所述第二啓動之後的第一端。

注意:根據結束日期是否包含在內,您可能需要嚴格的不等式進行比較。

+0

乾淨整潔!好的趕上也用「<」加上名字的比較。 – AgapwIesu

+0

嗨! a.name vsg

+0

我添加了a.userId <> a2.userID,但是這並不能幫助刪除重複項,並且我最終獲得幾乎兩倍的所需行數。 – vsg