Вы не упомянули, с каким видом SQL вы работаете, и в качестве пары комментариев уже не отмечены сценарии таблиц и данных или то, что вы пробовали до сих пор.Тогда это не будет ваш окончательный код, но он должен дать вам представление об одном подходе, который можно использовать для получения нужных вам чисел.
select
tb1.date,
count(tb2.arrivaldate) as breakfast,
sum(case when tb1.day_of_week in ('Saturday', 'Sunday') then 1 else 0 end) as lunch,
sum(case when tb1.day_of_week not in ('Saturday', 'Sunday') then 1 else 0 end) as dinner
from
tb1 left join tb2 on tb1.date between tb2.arrivaldate and tb2.departuredate
group by tb1.date
Обратите внимание, что это не совсем так.голова, я не пробовал и не проверял ваши данные;)