您可以看看下面的任务吗?找到原始开始日期到缺勤期间
我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应找到原始开始日期到缺席期间(从数据表格),缺席开始日期是星期一。
换句话说,脚本应该日复一日地“过去”,找到合适的缺席期开始的日期。
周一没有必要缺席是'生病'。这可能是也“旅游”,“生育” ......
预期结果的例子如下(注意第一和第三行 - 没有开始日期是从数据表中相应的行不同):
预先感谢您。
在存储中,EMP01在2017-08-29上工作,但您的预期结果显示这是他们缺席的开始。是对的吗? –
为什么''emp01'的结果'absence_start_date = 2017-08-29'根据他在同一天工作的'storage'表格?在'emp03'的情况下它的正确性?或相反亦然? – zarruq
是的,对不起,你是对的。我的错 –