Хорошо, это двухэтапный процесс.Во-первых, вы хотите найти строки, у которых есть перекрывающиеся строки в других таблицах.
Старый метод обнаружения перекрытия между двумя диапазонами заключается в том, что перекрытие может существовать, только если начало диапазона A не следует послеконец диапазона B, И конец диапазона A не перед началом диапазона B.
Другими словами, если B начинается до конца A, а B также заканчивается после запуска A, то существуетoverlap.
Теперь, как выразить это в SQL: вы начинаете с «корневой» таблицы в качестве первой таблицы в предложении FROM.Давайте назовем его Table1 со столбцами A & B (исходя из вашего изображения).
Чтобы найти строки в двух других таблицах, которые имеют какое-либо перекрытие, ПРИСОЕДИНЯЙТЕСЬ так:
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.E <= t1.B AND t2.F >= t1.A
INNER JOIN Table3 t3 --this table has to overlap both of the others
ON t3.X <= t1.B AND t3.Y >= t1.A
AND t3.X <= t2.F AND t3.Y >= t2.E
Byиспользуя ВНУТРЕННИЕ СОЕДИНЕНИЯ, все строки, которые не имеют перекрытий во всех трех таблицах, исключаются из рассмотрения.
Затем, чтобы вернуть только периоды, которые перекрываются, получите МАКС. t1.A, t2.E, t3.X
в качестве начала перекрытия,и МИНУТА t1.B, t2.F, t3.Y
как конец перекрытия.