每10分钟查看一天的历史出勤数据

时间:2018-11-05 02:44:59

标签: sql tsql sql-server-2016

我有一个包含学生出勤情况的表,模式为

StudentId   ClassId EventType   EventTime   
1           1       I           2018-10-31 07:00:00 AM
2           1       I           2018-10-31 07:02:00 AM
1           1       O           2018-10-31 07:31:00 AM
3           1       I           2018-10-31 07:45:00 AM

OutPut

ClassId     StudentCount    StartTime               EndTime
1           2               2018-10-31 07:00:00 AM  2018-10-31 07:10:00 AM
1           2               2018-10-31 07:10:01 AM  2018-10-31 07:20:00 AM
1           2               2018-10-31 07:20:01 AM  2018-10-31 07:30:00 AM
1           1               2018-10-31 07:30:01 AM  2018-10-31 07:40:00 AM
1           2               2018-10-31 07:40:01 AM  2018-10-31 07:50:00 AM

1 个答案:

答案 0 :(得分:0)

您需要生成时间。一种方法使用递归CTE。然后,有多种获取计数的方法。

with times as (
      select cast('2018-10-31 07:00:00' as datetime) dt
      union all
      select dateadd(minute, 10, dt)
      from times
      where dateadd(minute, 10, dt) < '2018-10-31 08:00:00'
     )
select t.dt,
       (select sum(case when eventtype = 'I' then 1 else -1 end)
        from attendance a
        where a.EventTime <= t.dt
       ) as attendance
from times;