sql >> Base de Datos >  >> RDS >> Mysql

SQL Para comprobar si la habitación está disponible entre las fechas

Esto responderá a su pregunta particular con sí o no. No estoy seguro de que sea útil ya que los valores de búsqueda de fechas son todos específicos en una lista codificada.

select coalesce(max('no'), 'yes') as available
from tbl t           
where room_type_id = 23 and
    dt in ("2018-03-06 00:00:00", "2018-03-07 00:00:00", 
           "2018-03-08 00:00:00", "2018-03-09 00:00:00");

Si el sentido de su lógica está destinado a encontrar al menos uno abierto date, entonces podrías intentar algo como esto:

select case when count(*) = 4 then 1 else 0 end as whatever_this_means
from tbl t
where room_type_id = 23 and
    dt in ("2018-03-06 00:00:00", "2018-03-07 00:00:00", 
           "2018-03-08 00:00:00", "2018-03-09 00:00:00");

El problema será que ha codificado el valor 4 ahora, que está vinculado a la cantidad de fechas en la lista más adelante en la consulta. Hay formas de manejar esto de forma más dinámica, pero no está del todo claro a partir de su pregunta cuál es la mejor manera de hacerlo.