shoorick: (Default)
shoorick ([personal profile] shoorick) wrote2004-12-07 02:41 pm

Проверка пересечения интервалов в MySQL

Чтоб самому потом не забыть:
SELECT *,(d2>=d3 AND d1<=d4) AS cmp FROM `test_ival`
Возвращает 1 в случае пересечения диапазонов [d1; d2] c [d3; d4] и 0 в противном случае.
Если вместо >= и <= использовать соответственно > и <, получится проверка пересечения (d1; d2) c (d3; d4).

(Anonymous) 2005-12-23 10:45 am (UTC)(link)
select t1.startwork, t2.endwork
from
workers t1, workers t2
where
t2.startwork >= t1.startwork and t2.startwork < t1.endwork
order by 1

Ну пусть такой код уже склеивает интервалы, но как их склеить к минимуму ?
При чем так, чтобы непропали единичные интервали, ибо при склеивании они пропадают если не использовать t2 >= t1 and t2 < t1 вместо приведеного выше кода.