Първо, не използвайте 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
за игра.