【问题标题】:SQL - Calculate 4 businessdays back in timeSQL - 及时计算 4 个工作日
【发布时间】:2020-02-05 12:01:00
【问题描述】:

我有一个关于时间和时间计算的问题。

我创建了一个具有以下维度的 DimDate 表:

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

我正在寻找一种解决方案,它告诉 SQL 包含自创建以来超过 4 个工作日(不包括周末和节假日)创建的人员。但我怀疑如何将 DimDate 合并到下面的等式中:

我只知道如何返回 4 天,但不排除周末和节假日。

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

【问题讨论】:

  • 如果今天是星期二,第一个工作日是星期一,是“4 个工作日前”星期五(即星期六/星期日计数到 4,星期五是工作日)还是星期三(星期六/sun 不计入4个工作日,4个工作日分别是周一、周五、周四和周三)?当天算不算?

标签: sql sql-server date case


【解决方案1】:

如果我正确阅读了您的问题,那么您应该能够根据有效日期过滤数据集,并按日期降序对过滤集中的每条记录进行排名。这会产生返回的天数,不包括工作日或节假日。

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

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 2021-05-09
    • 2023-03-19
    • 2021-12-18
    • 2021-06-16
    • 2012-06-12
    • 2011-01-16
    • 2010-09-25
    相关资源
    最近更新 更多