One way
Declare @isi Table(TheDate date);
With cte As
(Select GetDate() As TheDate
Union All
Select DateAdd(day, -1, TheDate) As TheDate From cte
Where DateDiff(day, TheDate, GetDate())< 30)
Insert @Days(TheDate) Select TheDate From cte;
Delete From d
From @Days d
Where d.TheDate In (Select h.HDate From Holiday_Table h)
Or DateDiff(day, '19000101', d.TheDate) % 7 In (5,6); /* 5 is Saturday and 6 is Sunday */
Select Min(TheDate)
From (Select Top 3 TheDate From @Days Order By TheDate Desc) a;
Tom