Как из интервала дат убрать все выходные и праздничные дни

Всем привет. Задача такая:

  1. Есть дата начала задачи и дата окончания задачи (например: 5 дней). Необходимо найти сколько дней выполнялась задача. Назовем это интервал. (это я нашел)
  2. Есть таблица с производственным календарем. Которая состоит из "Дата" и "Статус". Статус: 0 это выходной или праздничный день, 1 это рабочий день.

Вопрос: Как найти сколько дней выполнялась задача при условии, что все выходные и праздничные дни в этом интервале будут учтены. Т.е. с момента даты начала задачи до момента окончания задачи прошло 5 дней, но задача была взята в пятницу. По простой разнице дат получается, что дата выполнилась за 5 дней, но по факту она выполнилась за 3 дня, т.к. суббота и воскресенье не будет учитываться.

Прошу прощения, что не написал, как я решаю, но пока даже идей нет. Есть только как я считаю интервал между датами: iif(datediff(day,[ДатаНачала], [ДатаОкончания]) = 0, 1, datediff(day,[ДатаНачала], [ДатаОкончания]))

upd: Добавил данные из БД, вот из примера видно, что интервал между двумя датами 7 дней, но по факту, там есть 2 дня выходных, поэтому интервал будет 5.

введите сюда описание изображения


Это скрин из таблицы производственного графика, где видно, что 19 и 20 числа нерабочий день (0х00)

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Герман Борисов

Если исходить из того, что в производственном календаре есть все интересующие дни, по одной строке на каждый, то нам нужно найти количество дней (строк) в производственном календаре, которые, во-первых, попадают в интервал между датой начала и датой окончания включительно, во-вторых, являются рабочими.

SELECT COUNT(*)
FROM [производственный календарь] AS C
WHERE C.[Дата] BETWEEN [ДатаНачала] AND [ДатаОкончания]
  AND C.[Статус] = 1
→ Ссылка