vsg*_*vsg 0 sql database sql-server join sql-server-2012
我试图找到一种方法来连接表格的行,其下面有行.不知道这是否是一件事,但我想我会问.
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
Run Code Online (Sandbox Code Playgroud)
我希望得到日期重叠的人.从示例中,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
Run Code Online (Sandbox Code Playgroud)
现在,我正在加入桌子,但无法摆脱重复,即我的结果中既有AB又有BA.任何帮助将非常感激.提前致谢.
只需在比较中添加一个额外条件:
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;
Run Code Online (Sandbox Code Playgroud)
当第一个在第二个结束之前开始时,两个日期范围重叠,而第一个在第二个结束之后结束.
注意:根据结束日期是否包含在内,您可能需要严格的不等式进行比较.