计算连续几天缺席超过60天

时间:2016-12-10 21:55:00

标签: sql sql-server ssms

我有一张名为SickLeaves的桌子,上面有员工ID,病假的开始和结束日期。

EmpID   DateFrom    DateTo
3022    10.10.2010  13.10.2010
3022    09.11.2011  10.11.2011
3022    11.11.2011  11.11.2011
3022    13.11.2011  17.11.2011
3574    01.11.2011  14.11.2011
3574    15.11.2011  26.11.2011
3908    09.11.2011  09.11.2011
2734    09.11.2011  09.11.2011
3054    16.11.2011  16.11.2011
3054    17.11.2011  17.11.2011
3054    18.11.2011  18.11.2011
2246    09.11.2011  09.11.2011
3022    12.11.2011  12.11.2011

您可以看到,对于员工3022,有多个病假记录。

现在我想知道的是,这些员工中的哪一位从现在起连续缺席超过60天,不包括周末和假期。

Emp 3022有4片病叶,但其中只有3片是连续的。

EmpID   DateFrom    DateTo  ConsecutiveDaysOfAbsence
3022    09.11.2011  10.11.2011  2
3022    11.11.2011  11.11.2011  1
3022    13.11.2011  17.11.2011  4
3574    01.11.2011  26.11.2011  19
3908    09.11.2011  09.11.2011  1
2734    09.11.2011  09.11.2011  1
3054    16.11.2011  18.11.2011  3
2246    09.11.2011  09.11.2011  1

因此,只有这三个人才能分组该员工共有多少天缺席。

EmpID   SUMOFConsecutiveDaysOfAbsence
3022    7
3574    19
3908    1
2734    1
3054    3
2246    1

我设法从DateFrom和DateTo用DATEDIFF计算周末和假日,但我不知道如何从分组中排除每个EmpID没有连续日期的记录。

假期表具有以下结构

 Date           Holyday
 01.01.2016     New Year's Day
 18.01.2016     Martin Luther King Jr. Birthday
 15.02.2016     President's Day
 30.05.2016     Memorial Day
 04.07.2016     Independence Day
 05.09.2016     Labor Day
 11.11.2016     Veterans' Day
 24.11.2016     Thanksgiving Day
 25.11.2016     Thanksgiving Friday
 25.12.2016     Christmas Day
 26.12.2016     Christmas Day

我真的很感激一些提示。谢谢!

0 个答案:

没有答案