【发布时间】:2017-09-15 10:49:15
【问题描述】:
你能看看下面的任务吗?
我有 DATA 表(它包含上一周的数据):
CREATE TABLE DATA
(
EMPLOYEE nvarchar(50),
ABSENCE_START_DATE datetime,
ABSENCE_END_DATE datetime,
ABSENCE_TYPE nvarchar(50)
)
ABSENCE_START_DATE - date when absence starts
ABSENCE_END_DATE - date when absence ends
ABSENCE_TYPE - type of absence
当前表包含以下数据:
INSERT INTO DATA(EMPLOYEE,ABSENCE_START_DATE,ABSENCE_END_DATE,ABSENCE_TYPE) VALUES
('EMP01','2017-09-04 00:00:00.000','2017-09-06 00:00:00.000','Sickness'),--Monday - Wednesday
('EMP01','2017-09-08 00:00:00.000','2017-09-08 00:00:00.000','Vacation'),--Friday - Friday
('EMP02','2017-09-04 00:00:00.000','2017-09-09 00:00:00.000','Sickness'),--Monday - Friday
('EMP03','2017-09-05 00:00:00.000','2017-09-09 00:00:00.000','Sickness')--Tuesday - Friday
另外,我还有另一个表 - STORAGE(它包含早于前一周开始的日期的数据)。
CREATE TABLE STORAGE
(
EMPLOYEE nvarchar(50),
APPLY_DATE datetime,
ABSENCE_TYPE nvarchar(50)
)
有每日记录(不包括周六和周日——它们永远不会存在于这个表中)
INSERT INTO STORAGE(EMPLOYEE,APPLY_DATE,ABSENCE_TYPE) VALUES
('EMP01','2017-08-27 00:00:00.000','Sickness'),
('EMP01','2017-08-28 00:00:00.000','Worked'),
('EMP01','2017-08-29 00:00:00.000','Worked'),
('EMP01','2017-08-30 00:00:00.000','Sickness'),
('EMP01','2017-08-31 00:00:00.000','Sickness'),
('EMP01','2017-09-01 00:00:00.000','Sickness'),
('EMP02','2017-08-31 00:00:00.000','Worked'),
('EMP02','2017-09-01 00:00:00.000','Sickness')
所以,任务是: sql -script 应该找到缺勤期间的原始开始日期(来自 DATA 表),缺勤开始日期是 星期一。
换句话说,脚本应该日复一日地“过去”并找到适当的缺勤期开始的日期。
星期一缺勤不一定是“生病”。也可以是“旅行”、“孕产”……
以下示例的预期结果是(注意第一行和第三行 - 缺勤开始日期与 DATA 表中的相应行不同):
提前谢谢你。
【问题讨论】:
-
在 STORAGE 中,EMP01 于 2017 年 8 月 29 日工作,但您的预期结果显示这是他们缺席的开始。对吗?
-
为什么
absence_start_date = 2017-08-29在emp01的结果中是根据他在同一日期工作的storage表?如果是emp03,它正确吗?反之亦然? -
是的,对不起,你们是对的。我的错
-
我修改了下面的“预期”结果部分屏幕
标签: sql sql-server sql-server-2012