您可以看看下面的任務嗎?找到原始開始日期到缺勤期間
我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
是的,對不起,你是對的。我的錯 –