Помощь с составлением SQL-запроса

2 000 руб. за проект • наличный расчёт, электронные деньги
06 июля 2017, 00:58 • 2 отклика • 17 просмотров
Нужна помощь с составлением sql-запроса.

Есть система записи клиентов на услуги на определенное время и в определенный бокс.
Есть таблица бронирований (bookings) вида:
point_id start (datetime) end (datetime)
1 2017-07-06 16:40:00 2017-07-06 16:44:59
1 2017-07-06 20:00:00 2017-07-06 21:04:59
1 2017-07-06 09:30:00 2017-07-06 10:34:59
2 2017-07-05 17:30:00 2017-07-05 17:34:59

2 2017-07-05 09:00:00 2017-07-05 09:14:59

...
Таблица интерваллов (datetimes):
datetime (datetime)

2017-06-17 14:40:00

2017-06-17 14:50:00

2017-06-17 15:00:00

2017-06-17 15:10:00

2017-06-17 15:20:00

2017-06-17 15:30:00

2017-06-17 15:40:00

...
И запрос, который возвращает свободные интервалы, в зависимости от продолжительности услуги (в данном случае 599 секунд для 10 минутной услуги):
SELECT DISTINCT
all_slots.`datetime`
FROM
datetimes AS all_slots
LEFT JOIN(
SELECT `datetime`
FROM
datetimes AS d
JOIN bookings AS b
ON
b.start BETWEEN d.`datetime` AND DATE_ADD(
d.`datetime`,
INTERVAL 599 SECOND
) OR b.end BETWEEN d.`datetime` AND DATE_ADD(
d.`datetime`,
INTERVAL 599 SECOND
) AND point_id = 1
) AS not_available
ON
all_slots.`datetime` = not_available.`datetime`
WHERE
not_available.`datetime` IS NULL AND all_slots.`datetime` BETWEEN '2017-07-06 09:00:00' AND '2017-07-07 21:00:00'
Проблема в том, что если есть запись, например, с 20:00 до 21:05, при запросе свободных интервалов в 599 секунд, текущий запрос выдает вместе со свободными еще и 20:10, 20:20, 20:30.
При меньшей длительности услуги все ок, занятое время не выдает.