如果您正在尋找通過供應商ID來識別重疊這應該工作:
FYI我用MM/DD/YYYY
declare @contract table (SupplierID int, ContractStart datetime, ContractEnd datetime)
insert into @contract
select 20, '1/1/2010', '3/1/2010'
union all
select 24 , '12/12/2008', '1/12/2009'
union all
select 31, '1/13/2008 ', '2/13/2008'
union all
select 20, '1/13/2008', '2/13/2008'
union all
select 24, '11/11/2007 ', '12/11/2010'
union all
select 31, '12/12/2008 ', '1/1/2009'
SELECT a.supplierid,
a.contractstart,
a.contractend,
b.contractstart,
b.contractend
FROM @Contract a
INNER JOIN @Contract b
ON b.supplierid = a.supplierid
WHERE (b.contractstart < a.contractend)
AND (b.contractend > a.contractstart)
AND (b.contractstart != a.contractstart --Ignore overlap with self
AND b.contractend != a.contractend)
AND b.contractstart > a.contractstart -- No Duplicates