Если у вашей страховой таблицы также есть уникальный идентификатор для каждой страховки (мы надеемся, что так), то у вас может быть запрос, подобный этому
declare @tab table (
patid int
, insid int
, start_dttm datetime
, end_dttm datetime
)
insert into @tab values (1, 8, '2002-09-10', NULL)
, (1, 9, '2007-03-06', '2019-04-11')
, (53, 321513, '2015-01-13', NULL )
, (53, 11, '2008-08-14', '2015-01-13')
, (54, 12, '2015-01-13', NULL )
, (54, 13, '2008-08-14', '2015-01-12')
select a.*
, b.*
, 'Insurance record ' + cast(b.insid as varchar) + ' (' + convert(varchar,b.start_dttm,103) + ' to ' + convert(varchar,b.end_dttm,103) + ') '
+ 'overlaps Insurance record ' + cast(a.insid as varchar) + ' (' + convert(varchar,a.start_dttm,103) + isnull(' to ' + convert(varchar,a.end_dttm,103), ' still active') + ')'
from @tab a
inner join @tab b
on a.patid = b.patid
and a.insid != b.insid
where (b.start_dttm > a.start_dttm and b.start_dttm < isnull(a.end_dttm, getdate()+1))
or (b.end_dttm > a.start_dttm and b.start_dttm < isnull(a.end_dttm, getdate()+1))
or (a.end_dttm is null and b.end_dttm is null)
Примечание. Вам не нужно создавать переменную таблицы @tab, как я это сделал, просто используйте свою таблицу страхования.