Как из интервала дат убрать все выходные и праздничные дни
Всем привет. Задача такая:
- Есть дата начала задачи и дата окончания задачи (например: 5 дней). Необходимо найти сколько дней выполнялась задача. Назовем это интервал. (это я нашел)
- Есть таблица с производственным календарем. Которая состоит из "Дата" и "Статус". Статус: 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

