Мне нужно убрать праздничные и рабочие дни из двух вычислений дат. В запросе я выполняю. Проблема в том, что я все еще довольно плохо знаком с SQL и испытываю трудности в заключительной части.
Я создал функцию для рабочих и праздничных дней, которая, кажется, работает нормально. Я просто не знаю, кто вычесть их из вычислений DateDiff.
Ниже написано два бита кода. Первый - для функции, второй - для вычислений DateDiff.
CREATE FUNCTION [dbo].fn_CountWeekDays --To Create The Function
(
@fromdate Datetime,
@todate Datetime
)
RETURNS TABLE AS RETURN
(SELECT
(DATEDIFF(dd, @fromdate, @todate) + 1)
-(DATEDIFF(wk, @fromdate, @todate) * 2)
-(CASE WHEN DATENAME(dw, @fromdate) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @todate) = 'Saturday' THEN 1 ELSE 0 END)
-(SELECT COUNT(*) FROM PublicHolidays AS h WHERE h.PublicHolidayDate
BETWEEN @fromdate AND @todate)
As NoOfWeekDays
)
SELECT a.* --the DateDiff
,ISNULL(DATEDIFF(day,b.Last_Action_Date,a.Last_Action_Date),0)
'Date1'
,datediff(day, Min(a.Last_Action_Date) over (partition by a.
[App_ID]),
a.Last_Action_Date) 'Date2'
FROM (select *,ROW_NUMBER() OVER(PARTITION BY [App_ID] ORDER BY
Last_Action_Date)RowRank
from [dbo].[Audit_Log]
)a
LEFT JOIN (select *,ROW_NUMBER() OVER(PARTITION BY [App_ID] ORDER BY
Last_Action_Date)RowRank
from [dbo].[Audit_Log]
)b
ON a.[App_ID] = b.[App_ID]
AND a.RowRank = b.RowRank +1
ORDER BY a.App_ID ASC, a.last_Action_Date ASC
Нерабочие дни должны быть вычтены из «Date1», а также «Date2»
Любая справка будетоценили.