Първо, не използвайте Group като име на колона. Това е запазена дума във всеки SQL стандарт. Преименувах го на grp за целите на моя отговор.
Опитвам се да планирам нова смяна от '2012-06-01 08:00' до '2012-06-03 08:00' ...
INSERT INTO tbl (prim, grp, startdate, enddate)
SELECT 1, 10, '2012-06-01 08:00', '2012-06-03 08:00'
WHERE NOT EXISTS (
SELECT *
FROM tbl
WHERE prim = 1
AND grp = 10
AND '2012-06-03 08:00' > startdate -- not >= to allow sharing a border
AND '2012-06-01 08:00' < enddate -- and not BETWEEN ... AND either
)
Имайте предвид, че сравнявам:
new_end > old_start new_start < old_end
Ако използвате BETWEEN .. AND .. включвате границите на смяна във вашия тест. Това е същото като използването на >= и <= . Трябва да използвате > и < за да позволите границите да се припокриват.
Е, и опитайте моя до голяма степен опростен синтаксис. Не съм сигурен какво сте имали там първоначално.
Ето работеща демонстрация на sqlfiddle. com
за игра.