Если я правильно читаю ваш вопрос, то вы сможете фильтровать набор данных по действительным дням и присваивать каждой записи в отфильтрованном наборе ранжирование по убыванию даты. Это дает количество дней назад, не включая будние и праздничные дни.
DECLARE @T TABLE(Date DATETIME, Weekday INT, IsWeekend BIT, IsHoliday BIT)
INSERT @T VALUES
('01/01/2000',7,1,1),
('12/31/1999',6,0,0),
('12/30/1999',5,0,0),
('12/29/1999',4,0,0),
('12/28/1999',3,0,0),
('12/27/1999',2,0,0),
('12/26/1999',1,1,0),
('12/25/1999',7,1,1),
('12/24/1999',6,0,0)
DECLARE @ReportDate DATETIME = '01/04/2000'
DECLARE @DaysBack INT = 4
SELECT
*
FROM
(
SELECT
ValidDaysBack=ROW_NUMBER() OVER(ORDER BY Date DESC),*
FROM
@T
WHERE
(IsWeekend = 0 AND IsHoliday = 0) AND (Date <= @ReportDate)
)AS Data
WHERE
ValidDaysBack >= @DaysBack