sql - SQL - 及时计算 4 个工作日
问题描述
我有一个关于时间和时间计算的问题。
我创建了一个具有以下维度的 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'
解决方案
如果我正确阅读了您的问题,那么您应该能够根据有效日期过滤数据集,并按日期降序为过滤集中的每条记录提供排名。这会产生返回的天数,不包括工作日或节假日。
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
推荐阅读
- android - 设置适配器时仅在 ViewPager 中创建第一个片段
- laravel - 如何使用 Laravel domPDF 删除生成按钮
- javascript - 传递给 asp.net mvc JsonResult actionmethod 的 javascript 对象属性始终为空
- python - 查询DB表并转换为DataFrame ok,但是导出时数据被截断
- sqlplus - 如何覆盖数据库 Oracle 12c SQL plus 中的旧 ddl
- go - 如何通过结构字段名称获取 Gmail API 错误代码?
- scala - 使用枚举更新表
- tensorflow - Keras / TensorFlow 批次随机化?
- c++ - 如何制作从 C++ 到 Swift 的回调函数指针?
- javascript - 从字符串标识符中获取 json 字段