Điều này sẽ trả lời câu hỏi cụ thể của bạn có hoặc không. Tôi không chắc nó hữu ích vì các giá trị tìm kiếm ngày đều cụ thể trong danh sách được mã hóa cứng.
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");
Nếu cảm giác logic của bạn là nhằm tìm ra ít nhất một điểm mở ngày sau đó bạn có thể thử một cái gì đó như thế này:
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");
Vấn đề sẽ là bạn đã mã hóa cứng giá trị 4 bây giờ được gắn với số ngày trong danh sách sau này trong truy vấn. Có nhiều cách để xử lý điều này một cách linh hoạt hơn nhưng không hoàn toàn rõ ràng đối với câu hỏi của bạn cách tốt nhất để làm điều đó.