Просмотр исторических данных о посещаемости за день каждые 10 минут - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть таблица, которая содержит посещаемость студентов, схема

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

Мощно

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 голосов
/ 05 ноября 2018

Вам нужно сгенерировать время. Один способ использует рекурсивный 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;
...