Идея состоит в том, чтобы определить начальную последовательность соседних праздников. Вы можете сделать это, перечислив праздники и сравнив перечисление с количеством дней в будущем. Если их нет, просто используйте hte на следующий день:
select coalesce(min(hdate), :date + 1 day
from (select h.*,
row_number() over (order by hdate) as seqnum,
days(hdate) - days(:date) as num_days
from holidays h
where hdate >= :date + 1 day
) h
where seqnum = num_days;
Это может быть включено в другой запрос, например, с помощью коррелированного подзапроса.
Вы столкнулись с проблемой создания holidays
стол. Вы также можете go сделать следующий шаг и создать полную таблицу календаря с флагом «выходной». Тогда эта логика c будет проще и может быть прямо в таблице.