La condición de unión:
- Intenta encontrar otro evento con la misma sala
- Pero necesita tener una identificación diferente a la suya
- Deben superponerse las fechas Determinar si dos intervalos de fechas se superponen
- Finalmente debe tener una fecha de creación posterior.
Si no puede encontrar ninguna otra fila, significa que está solo porque no se superponen o porque es la fecha más reciente.
SELECT a.*
FROM "events" a
LEFT JOIN "events" b
ON a.room = b.room
AND a.id <> b.id
AND a."start" <= b."end"
AND a."end" >= b."start"
AND a.created_at < b.created_at
WHERE b.id IS NULL;
SALIDA
| id | start | end | created_at | room |
|----|----------------------|----------------------|-----------------------------|-------|
| 2 | 2019-01-23T18:30:00Z | 2019-01-23T19:00:00Z | 2019-01-23T01:04:05.861876Z | Room1 |
| 7 | 2019-01-23T20:15:00Z | 2019-01-23T20:45:00Z | 2019-01-20T20:20:20.20202Z | Room1 |
| 9 | 2019-01-23T18:30:00Z | 2019-01-23T19:00:00Z | 2019-01-23T01:04:05.861877Z | Room2 |
| 14 | 2019-01-23T20:15:00Z | 2019-01-23T20:45:00Z | 2019-01-20T20:20:20.20202Z | Room2 |
| 16 | 2019-01-23T20:15:00Z | 2019-01-23T20:45:00Z | 2019-01-20T20:20:20.202021Z | Room3 |