#mysql #mariadb
Вопрос:
я построил эту скрипку для тебя: https://dbfiddle.uk/?rdbms=mariadb_10.5amp;fiddle=35f21ff5601276b4dba0e9250594d101
Существует запрос, который должен получить все временные интервалы дня со следующими условиями:
- нет временных интервалов с обслуживанием 1 или 3 в этот день? > Получить все временные интервалы
- есть ли одна или несколько служб с 1 или 3 в этот день ? > Получите все временные интервалы до этого сервиса
это прекрасно работает ! Но теперь у меня новая проблема !
- есть ли доступная услуга 0, как показано на скрипке, дополнительные временные интервалы после этой услуги 0.
скрипка показывает мне результат:
2021-07-07 14:00:00
Но я хотел бы также
2021-07-07 16:00:00
потому что перед этим слотом находится услуга = 0
Вы можете мне помочь, пожалуйста??
Ответ №1:
Если вы имеете в виду «непосредственно перед тем, как этот слот станет сервисом = 0″, попробуйте:
SELECT * FROM `timeslots` ts
WHERE (
NOT EXISTS (
SELECT NULL FROM `timeslots` ts2
WHERE DATE(ts2.`timeslot`) = DATE(ts.`timeslot`)
AND TIME(ts2.`timeslot`) <= TIME(ts.`timeslot`)
AND `service` != 2
)
OR
EXISTS (
SELECT NULL FROM `timeslots` ts2
WHERE DATE(ts2.`timeslot`) = DATE(ts.`timeslot`)
AND DATE_SUB(ts.`timeslot`, INTERVAL 1 HOUR) = ts2.`timeslot`
AND ts2.`service` = 0
)
)
AND `timeslot` > DATE_ADD(CURDATE(), INTERVAL 1 DAY)
ORDER BY `timeslot`