Следующий запрос вернет идентификатор table1, если выполняется одно из следующих условий:
1) диапазон дат, описанный в таблице 1, вообще пересекается с диапазоном дат в table2
2) диапазон дат, описанный в таблице 1, пересекается с диапазоном дат, начинающимся с даты начала строки в таблице 2 и заканчивающейся датой окончания следующей хронологической строки в таблице 2 той же категории.
select distinct table1.id
from table1
inner join (select id,
category,
startdate,
enddate,
lead(enddate)
over (partition by category
order by enddate) as next_enddate
from table2)
on (table1.startdate < table2.enddate
or table1.startdate < table2.next_enddate)
and table1.enddate >= table2.startdate
and table1.ID = table2.ID
and table1.category = table2.category
Iне совсем понимаю, как использовать третью таблицу в этом сценарии, поэтому она пока игнорируется.Надеюсь, это все же поможет вам найти ответ, который вы ищете.