Здравствуйте, коллеги! Требуется альтернативное- более рациональное решение задачи на сходимость временных интервалов!
В приложении картинка, изображающая текущую картинку в базе. Есть две одинаковые по структуре таблицы с разными данными (id, value_1, start_date, end_date) и (id, value_1, start_date, end_date)
Необходимо сджойнить записи в этих таблицах по ID,но необходимы не все записи, а лишь те что приходятся имеют пересечения по временным интервалам (на картинке обозначено красным).
Я создал следующий запрос:
select
t1.id,
t1.value,
t2.id,
t2.value
from t1 JOIN t2
WHERE
(to_date(to_char(t2.start_date, 'DD.MM.YY')) BETWEEN to_date(to_char(t1.start_date, 'DD.MM.YY')) AND to_date(to_char(t1.end_date, 'DD.MM.YY'))
OR to_date(to_char(t2.end_date, 'DD.MM.YY')) BETWEEN to_date(to_char(t1.start_date, 'DD.MM.YY')) AND to_date(to_char(t1.end_date, 'DD.MM.YY'))
)
OR
(to_date(to_char(t1.start_date, 'DD.MM.YY')) BETWEEN to_date(to_char(t2.start_date, 'DD.MM.YY')) AND to_date(to_char(t2.end_date, 'DD.MM.YY'))
OR to_date(to_char(t1.end_date, 'DD.MM.YY')) BETWEEN to_date(to_char(t2.start_date, 'DD.MM.YY')) AND to_date(to_char(t2.end_date, 'DD.MM.YY'))
)
Начальник говорит,что условие для where, которое я сделал нерациональное. Подскажите как оптимизировать запрос.
Большое спасибо!