SQL - Рассчитать 4 рабочих дня назад во времени - PullRequest
0 голосов
/ 05 февраля 2020

У меня вопрос по поводу времени и расчетов.

Я создал таблицу DimDate со следующими размерами:

Date       Day DaySuffix    Weekday WeekDayName IsWeekend   IsHoliday
2000-01-01  1    st            7    Saturday       1           1

Я ищу решение, которое сообщает SQL для включения лиц, созданных более 4 рабочих дней go (исключая выходные и праздничные дни) с момента создания. Но я сомневаюсь, как включить DimDate в приведенное ниже уравнение:

Я только выяснил, как go вернуться на 4 дня, но не исключая выходные и праздничные дни.

,case   
   when Person = 1 and CreationDate < DATEADD(day, -4, GETDATE())
     then 1
     else 0 
end as 'Missing'

1 Ответ

1 голос
/ 05 февраля 2020

Если я правильно читаю ваш вопрос, то вы сможете фильтровать набор данных по действительным дням и присваивать каждой записи в отфильтрованном наборе ранжирование по убыванию даты. Это дает количество дней назад, не включая будние и праздничные дни.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...