Была подобная задача по учету нахождения тикетов Jira в определенных статусах, причем не в рамках одного дня, а в рамках всего срока жизни тикета, исключая выходные, праздничные дни, а также обеденное время и время нахождения в каких-то промежуточных статусах.
Решил через сбор всех границ интервалов нахождения в статусах в массивы, их unnest вместе с generate_subscripts, далее последовательной склейки между собой по позиции и добивании правой границы максимальным значением последнего неисключающегося (речь про выходные и праздники) дня. Ну и дальше уже из этих интервалов исключал все, что нужно, считал время на каждом интервале и суммировал для вывода