sql >> Base de Datos >  >> RDS >> PostgreSQL

Implementación de fechas bloqueadas para un modelo ORM de eventos de usuario

Aquí está la solución que elegí. El truco fue usar left outer join (comando de Ruby ávido_cargar) para los usuarios y la tabla de períodos_fechas_bloqueados, e incluidos aquellos usuarios cuyo campo de fecha_de_inicio en la tabla unida es NULL, obviamente porque no tienen ningún objeto de fecha bloqueado asociado con ellos mismos. La consulta que uso:

User.eager_load(:blocked_date_periods).
  where("blocked_date_periods.start_date is null OR 
    not tsrange(
      blocked_date_periods.start_date - '00:59:59'::interval,
      blocked_date_periods.end_date + '00:59:59'::interval
    ) @> ?::timestamp", 
  Date.parse(DATE_STRING)).count

Tuve que sumar y restar 1 hora de la fecha de inicio y finalización porque la consulta no quería abarcar fechas de finalización exactas por alguna razón, por lo que el 26-12-2015 no se incluyó dentro del período del 22-12-2015 al 16-12-2015 por alguna razón que aún no entiendo.

Por alguna razón no me gusta esa solución y me gustaría saber si hay una consulta mejor y más rápida que la que tengo.