Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-计算4个工作日的时间_Sql_Sql Server_Date_Case - Fatal编程技术网

SQL-计算4个工作日的时间

SQL-计算4个工作日的时间,sql,sql-server,date,case,Sql,Sql Server,Date,Case,我有一个关于时间和时间计算的问题 我已创建了具有以下维度的DimDate表: Date-Day后缀Weekday-WeekDayName是weekend-IsHoliday 2000-01-01 1街7号星期六11 我正在寻找一个解决方案,它告诉SQL包含自创建以来在4个工作日之前(不包括周末和节假日)创建的人员。但我怀疑如何将DimDate合并到以下等式中: 我只知道如何回到过去4天,但不排除周末和假期 ,case when Person = 1 and CreationDate

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

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

Date-Day后缀Weekday-WeekDayName是weekend-IsHoliday
2000-01-01 1街7号星期六11
我正在寻找一个解决方案,它告诉SQL包含自创建以来在4个工作日之前(不包括周末和节假日)创建的人员。但我怀疑如何将DimDate合并到以下等式中:

我只知道如何回到过去4天,但不排除周末和假期

,case   
   when Person = 1 and CreationDate < DATEADD(day, -4, GETDATE())
     then 1
     else 0 
end as 'Missing'
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
,案例
当Person=1且CreationDate
如果我正确阅读了您的问题,那么您应该能够根据有效天数筛选数据集,并按日期降序为筛选集中的每条记录排序。这将返回天数,不包括工作日或节假日

,case   
   when Person = 1 and CreationDate < DATEADD(day, -4, GETDATE())
     then 1
     else 0 
end as 'Missing'
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
DECLARE@T表(Date-DATETIME,Weekday-INT,IsWeekend位,IsHoliday位)
插入@T值
('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)
声明@ReportDate DATETIME='01/04/2000'
声明@DaysBack INT=4
挑选
*
从…起
(
挑选
ValidDaysBack=第行(按日期描述的订单),*
从…起
@T
哪里
(IsWeekend=0和IsHoliday=0)和(Date=@DaysBack)

如果今天是星期二,第一个工作日是星期一,那么“4个工作日前”是星期五(即星期六/星期日计入4个工作日,星期五是一个工作日)还是星期三(星期六/星期日不计入4个工作日,4个工作日是星期一、星期五、星期四和星期三)?当前日期是否计入?