Как рассчитать разницу во времени между двумя непересекающимися записями с помощью mysql
Я использую планировщик (календарь) в приложении WinForms (vb.net) и сохранять встречи (startDateTime &endDateTime) в базе данных MySql.
В процессе записи на прием мне нужно проверить, доступен ли определенный ресурс (например, комната) в течение определенного периода времени (минут) в определенный день.
Я искал здесь возможные решения, соответствующие моему сценарию, однако все решения относятся к поиску записей в течение определенного периода времени.
Я сохраняю время начала и окончания встречи в БД, а также все необходимые ресурсы для этой встречи.
Я могу иметь несколько ресурсов (например, более одной комнаты) и хотел бы иметь возможность найти комнату с не выделенным периодом времени, если ресурсы по умолчанию (или выбранные комнаты) не будут доступны в течение этого периода времени.
Период времени может варьироваться от 10 минут до 2 часов, но это всегда будет установленный период для типа назначения и ресурса, например: назначение: заседание Совета директоров
Ресурс: Зал Заседаний Совета Директоров
Время Начала: 02/02/2019 09:00:00
Время Окончания: 02/02/2019 10:00:00
Любая помощь будет оценена по достоинству.
Что я уже пробовал:
Код, с которым я играю:
SELECT (TIME(b.appStartTime) - TIME(a.appEndTime)) as timedifference, a.appID, a.appOwnerKey, a.appEndTime, b.appStartTime, a.appSubject, a.appDescription, a.appToolTip, a.appCategory, a.appImg, a.appPatWaiting FROM cusAppointments a INNER JOIN cusAppointments b ON b.appID = (a.appID + 1) WHERE (DATE(a.appStartTime) = DATE(NOW()) AND DATE(b.appEndTime) = DATE(NOW())) AND (TIME(b.appStartTime) - TIME(a.appEndTime)) >= 15000 AND a.appOwnerKey = 'Admin .' ORDER BY a.appStartTime ASC;
Это не работает, потому что в моем сознании я должен работать с двумя наборами записей одной и той же таблицы, упорядоченными по StartTime, а затем вычесть EndTime rowid набора записей A из StartTime rowid набора записей B + 1.
Maciej Los
Можете ли вы предоставить "короткую версию" и небольшой фрагмент данных в следующем формате: appID, appStartTime, appEndTime
и т. д.? Какое поле является первичным ключом?
Tino Fourie
Привет, Мацей, спасибо за ваш комментарий.
AppID-это PK, однако было бы бессмысленно даже рассматривать appID, потому что у меня могут быть последовательные appID, но не последовательные периоды времени.
appID = INT(11) автоматическое увеличение
appStartTime = DateTime (2019-01-01 10:00:00)
appEndTime = DateTime (2019-01-01 10:15:00)
Я действительно ищу времена, когда ресурсы не забронированы, однако пользователь не сможет увидеть, забронирован ли ресурс или нет, потому что тип бронирования будет определять, какой период времени будет между appStartTime и appEndTime.
Richard Deeming
Мне это кажется неправильным. Если я закажу 2-часовую встречу с 3 вечера сегодня, а номер будет доступен только в течение 2 часов с 9 утра, то я не буду считать это приемлемой альтернативой.
Вы ищете ресурсы, которые не имеют перекрывающегося бронирования вместо этого?
Maciej Los
Похоже, ОП ищет пробелы и островки в дате и времени...