从范围确定生病期

我有以下一组数据,代表一段时间(12个月)内的员工病假/缺勤天数,名称为缺席:

Day Date DaysSick OccasionsSick Notes Tuesday 2016-09-27 1 Lisa A working today Thursday 2016-09-29 1 Lisa sick today Celeste Thursday 2017-01-05 1 Lisa sick today 

我想根据生病的情况更新OccasionsSick专栏。 所以我会有以下几点:

 Day Date DaysSick OccasionsSick Notes Tuesday 2016-09-27 1 1 Lisa A working today Thursday 2016-09-29 1 Lisa sick today Celeste Thursday 2017-01-05 1 1 Lisa sick today 

所以,前两项是同病期,所以我需要在第一行1,最后一项是一个单独的病假,所以再次1。

现在,为了确定一个病假期,将会提到一个名单如下:

 Date RosterType 2016-09-27 Sick 2016-09-28 Day Off 2016-09-29 Sick 2016-09-30 Normal 

所以27日和29日是病假,28日是标准rest日,这很可能发生,因此连续使用日不是一个select。 我需要能够find病假,直到find一个“正常”的RosterType,然后打破病假。 然后需要根据所需的结果集来分配这个1。

这里更新数据的最好方法是什么? 除了确定一个生病期的逻辑之外,我已经想出了一个很大的空白。

我用VBA在Excel中展示这些数据,所以在VBA中分配病态的时间也可以更容易,而原始数据

请检查一下。 这假定每天在名册上都有一个条目。 基本上我只是build立一个时期,并在名单上的日子。 如果中间有正常的日子,那就算是一个新的时期。

 WITH CTE AS ( SELECT [day] ,[date] ,LAG(date, 1) over (order by date) datebefore ,[dayssick] FROM [dbo].[absence] ) SELECT * ,CASE WHEN ((SELECT COUNT(1) FROM [dbo].[rostertype] WHERE date < c.date AND date > c.datebefore AND rostertype = 'Normal') > 0 OR c.datebefore IS NULL) THEN 1 ELSE 0 END OccasionsSick FROM CTE c