我试图弄清楚表格中特定ID的任何日期是否重叠。这是我的表格的一个例子
ID | EffDate | ExpDate
---------------------------------
1 | 2000-01-01 | 2010-12-31
2 | 2000-01-01 | 2050-12-31
1 | 2011-01-01 | 2011-12-31
1 | 2011-12-31 | 2050-12-31
在TableA
中我需要检查以确保没有任何ID与“self”相交,因此1的任何一个都不能与任何其他ID相交,但如果eff和exp日期相交则无关紧要ID 2.
不仅仅是一个完整的答案。
提前致谢
答案 0 :(得分:6)
这会在ID
等于1的行中找到重叠:
declare @TabA table (ID int,EffDate datetime2,ExpDate datetime2)
insert into @TabA(ID,EffDate,ExpDate) values
(1,'20000101','20101231'),
(2,'20000101','20501231'),
(1,'20110101','20111231'),
(1,'20111231','20501231')
select
* --TODO -Pick columns
from
@TabA t1
inner join
@TabA t2
on
t1.ID = t2.ID and
t1.EffDate <= t2.ExpDate and --Play with these
t1.ExpDate >= t2.EffDate and --For Inclusive/Exclusive
t1.EffDate < t2.EffDate
结果:
ID EffDate ExpDate ID EffDate ExpDate
----------- ---------------------- ---------------------- ----------- ---------------------- ----------------------
1 2011-01-01 00:00:00.00 2011-12-31 00:00:00.00 1 2011-12-31 00:00:00.00 2050-12-31 00:00:00.00
您可以使用比较运算符制作EffDate
和ExpDate
包含或排他边界值中的一个或两个。
答案 1 :(得分:0)
我认为这个可能有一个非常简单的解决方案:
select distinct ta2.*
from #TableA ta1 join #TableA ta2 on
(ta1.EffDate > ta2.EffDate and ta1.EffDate < ta2.ExpDate)
or (ta1.ExpDate > ta2.EffDate and ta1.ExpDate < ta2.ExpDate)