У меня есть таблица с несколькими строками на одного сотрудника. Каждая из этих строк имеет staff_id, start_date и end_date. Согласно персоналу, если какая-либо начальная_дата находится между начальной_датой и конечной_датой другой строки или если какая-либо конечная_дата находится между начальной_датой и конечной_датой другой строки, тогда я должен пометить эти записи как идентичные. Как я могу это сделать? Я попытался выполнить перекрестное применение, потому что думал, что это будет декартово произведение (сравнение каждой строки), и я также пробовал временные таблицы. Но я не получил ни один из них, чтобы работать. Вот некоторые фиктивные данные:
if exists (select * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#staff_records')
) DROP TABLE #staff_records;
create table #staff_records
(
staff_id varchar(max),
start_date datetime,
end_date datetime
)
insert #staff_records values('AA-22','2/1/15','2/4/15')
insert #staff_records values('AA-22','2/5/15','2/6/15')
insert #staff_records values('AA-22','2/9/15','2/13/15')
insert #staff_records values('AA-22','2/4/15','2/16/15')
insert #staff_records values('AA-22','1/25/15','2/2/15')
insert #staff_records values('BB-22','2/1/15','3/1/15')
insert #staff_records values('BB-22','3/1/15','4/1/15')
select * from #staff_records order by staff_id, start_date desc