Как я могу удалить нерабочие дни из расчета даты? - PullRequest
1 голос
/ 11 ноября 2019

Мне нужно убрать праздничные и рабочие дни из двух вычислений дат. В запросе я выполняю. Проблема в том, что я все еще довольно плохо знаком с 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»

Любая справка будетоценили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...