Tengo 2 tablas en la base de datos con los siguientes atributos:MySQL - se superpone Encontrar tiempo
Booking
=======
booking_id
booking_start
booking_end
resource_booked
===============
booking_id
resource_id
La segunda tabla es una entidad asociativa entre "Reserva" y "recursos" (es decir, 1 de reserva puede contener muchos recursos). Los atributos booking_start y booking_end son marcas de tiempo con fecha y hora en él.
¿Sé cómo podría averiguar cada resource_id (resource_booked) si la fecha/hora se superpone o choca con otras reservas de resource_id similar?
estaba garabateando la respuesta en papel, ilustrado, para ver si me puede ayudar a visualizar cómo podría solucionar esto y me dieron esto:
- Junto a las 2 tablas (reserva, Booked_resource) en una tabla con los 4 atributos necesarios.
- Siga la respuesta sugerida aquí: Find overlapping (date/time) rows within one table
lo hice, pero el paso 1 paso 2 se dejándome sorprendido!
¡Realmente agradecería cualquier ayuda en esto! ¡Gracias!
EDIT: que estaba leyendo la respuesta del Sr. Renshaw e intentó hacer una por mi cuenta para ver si entendí y me dieron el concepto:
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
I que yo estaba tratando de crear 2 tablas idénticas y únelos con resource_id, busque registros con id de recurso similar pero diferente booking_id y vea si el booking_start datetime de uno (booking_id) está entre el booking_start y el booking_end de otro (booking_id).
Es realmente complicado y ni siquiera estaba seguro de si mi consulta me preguntaba qué era lo que tenía en mente, pero por algún milagro, obtuve la misma respuesta que el Sr. Renshaw.
Por alguna razón, obtengo 'duplicados' de ciertos registros Como: * b2.booking_id | b2.creation_date | rb1.resource_id | b1.creation_date | b1.booking_id * ** 23 | 2006-08-31 13: 21: 25.0 | 12 | 2006-09-05 14: 12: 17.0 | 21 ** Y otra línea a continuación: ** 21 | 2006-09-05 14: 12: 17.0 | 12 | 2006-08-31 13: 21: 25.0 | 23 ** – Cuppy
Agregué otra cláusula WHERE que verifica si b1.creation_date> = b2.creation_date para que solo se muestren las reservas posteriores y ¡parece que funciona! ¡Gracias de nuevo! – Cuppy