У меня есть таблица с некоторыми DATETIME
диапазонами, что-то вроде
id | start | end
----------------------------------------------
1 | 2011-12-18 16:00:00 | 2011-12-18 17:00:00
2 | 2011-12-19 08:00:00 | 2011-12-19 10:00:00
3 | 2011-12-19 11:00:00 | 2011-12-19 13:00:00
4 | 2011-12-19 12:00:00 | 2011-12-19 14:00:00
5 | 2011-12-19 13:00:00 | 2011-12-19 15:00:00
6 | 2011-12-19 13:00:00 | 2011-12-19 14:00:00
7 | 2011-12-20 13:00:00 | 2011-12-20 14:00:00
Итак, на день 2011-12-19 диапазоны охватывают примерно так:
8 9 10 11 12 13 14 15
<-------->
<-------->
<-------->
<-------->
<---->
Цельпри вставке новой записи найти максимальное количество уже существующих перекрывающихся диапазонов: т.е. при вставке нового диапазона 2011-12-19 12:00:00 - 2011-12-19 15:00:00
я хотел бы получить 3
, поскольку максимальное число перекрывающихся диапазонов равно 3, из 13:00–14: 00.
С тех пор как мне удалось получить это
select
count(*) as cnt
from
mytable as p
where
( # check if new renge overlap existings ones
(@start >= start and @start < end)
or
(@end > start and @end <= end)
)
or
( # check if existing range is included by new one
start between @start and @end
and
end between @start and @end
)
Но это возвращение 4
, поскольку оно обнаруживает все диапазоны, кроме первого, но неверно.
Я уже нашел
Но все эти вопросы немного отличаются.
Я на MysQL 5.7, но обновляюсь до 8возможно при необходимости.