Чтобы действительно решить эту проблему, вам нужна таблица Calendar
с одной строкой в день.
С такой таблицей вы можете сделать:
select c.date
from calendar c
where c.date >= '2018-12-05' and
c.date <= '2018-12-20' and
not exists (select 1
from t
where c.date >= start_date and
c.date <= end_date
);
Замечу, что этоroom_number
вообще не учитывается - потому что в вашем вопросе это вообще не упоминается.Если у вас есть вопрос, который включает room_number
, задайте другой вопрос с соответствующими образцами данных, желаемыми результатами и объяснением того, чего вы хотите достичь.