Først og fremmest, brug ikke Group
som kolonnenavn. Det er et reserveret ord i enhver SQL-standard. Jeg omdøbte den til grp
med henblik på mit svar.
Forsøger at planlægge et nyt vagt fra '2012-06-01 08:00'
til '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
)
Bemærk, at jeg sammenligner:
new_end > old_start new_start < old_end
Hvis du bruger BETWEEN .. AND ..
du medtager grænserne for et skift i din test. Det er det samme som at bruge >=
og <=
. Du skal bruge >
og <
for at tillade grænser at overlappe.
Nå, og prøv min stort set forenklede syntaks. Ikke sikker på, hvad du havde der oprindeligt.
Her er en fungerende demo på sqlfiddle. com
at lege med.