To odpowie na Twoje pytanie tak lub nie. Nie jestem pewien, czy jest to przydatne, ponieważ wszystkie wartości wyszukiwania dat są określone na zakodowanej liście.
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");
Jeśli sens Twojej logiki ma na celu znalezienie co najmniej jednego otwartego data, możesz spróbować czegoś takiego:
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");
Problem polega na tym, że zakodowałeś teraz na stałe wartość 4, która jest powiązana z liczbą dat na liście w dalszej części zapytania. Istnieją sposoby, aby poradzić sobie z tym bardziej dynamicznie, ale z Twojego pytania nie wynika do końca, jaki jest najlepszy sposób, aby to zrobić.