У меня есть 2 таблицы в базе данных со следующими атрибутами:
Booking
=======
booking_id
booking_start
booking_end
resource_booked
===============
booking_id
resource_id
Вторая таблица представляет собой ассоциативную сущность между «Резервированием» и «Ресурсом» (то есть 1 резервирование может содержать много ресурсов). Атрибуты booking_start и booking_end являются временными метками с указанием даты и времени.
Могу ли я узнать, как я могу узнать для каждого resource_id (resource_booked), совпадает ли дата / время с другими бронированиями с аналогичным resource_id?
Я рисовал ответ на бумаге, наглядно, чтобы увидеть, может ли он помочь мне визуализировать, как я могу решить эту проблему, и я получил это:
- Объединение двух таблиц (Booking, Booked_resource) в одну таблицу с четырьмя необходимыми атрибутами.
- Следуйте предложенному здесь ответу: Найти перекрывающиеся (дата / время) строки в одной таблице
Я сделал шаг 1, но шаг 2 оставляет меня в замешательстве!
Буду очень признателен за любую помощь в этом! Спасибо!
EDIT:
Я читал ответ мистера Реншоу и пытался сделать его самостоятельно, чтобы понять, понял ли я и понял ли я концепцию:
SELECT
a.*
FROM
(SELECT
b.creation_date,
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b
INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as a,
(SELECT
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as
WHERE
a.resource_id = b.resource_id
AND
a.booking_id <> b.booking_id
AND
a.booking_start BETWEEN b.booking_start AND b.booking_end
AND
a.creation_date >= b.creation_date
Я думаю Я пытался создать 2 одинаковые таблицы и объединить их с помощью resource_id, найти записи с похожим идентификатором ресурса, но с другим значением booking_id, и посмотреть, находится ли date_start datetime одного (booking_id) между booking_start и booking_end другого (booking_id).
Это действительно грязно, и я даже не был уверен, что мой вопрос спрашивал, что я имел в виду, но каким-то чудом я получил тот же ответ, что и мистер Реншоу!