SQL-计算4个工作日的时间
我有一个关于时间和时间计算的问题 我已创建了具有以下维度的DimDate表: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
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个工作日是星期一、星期五、星期四和星期三)?当前日期是否计入?