Za prvé, nepoužívejte Group
jako název sloupce. Je to vyhrazené slovo v každém standardu SQL. Přejmenoval jsem to na grp
pro účely mé odpovědi.
Pokouším se naplánovat novou směnu od '2012-06-01 08:00'
do '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
)
Všimněte si, že srovnávám:
new_end > old_start new_start < old_end
Pokud použijete BETWEEN .. AND ..
do svého testu zahrnete hranice posunu. Je to stejné jako při použití >=
a <=
. Musíte použít >
a <
aby se hranice překrývaly.
No a zkuste moji značně zjednodušenou syntaxi. Nejste si jisti, co jste tam původně měli.
Zde je pracovní ukázka na sqlfiddle. com
hrát.