sql - 每 10 分钟查看一天的历史考勤数据
问题描述
我有一个包含学生出勤的表,架构是
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
解决方案
您需要生成时间。一种方法使用递归 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;
推荐阅读
- javascript - 在自定义 MUI 按钮变体中使用主题调色板颜色
- oracle - Oracle 电子邮件队列通知
- reactjs - React Hooks:从不同的 .jsx 文件更新 useState 挂钩?
- python-3.x - 使用 py2exe 编译时编译失败
- javascript - WebSocket 连接失败:
- python - 如何指定每个组的透明度-python
- javascript - res.json 正在发送空数组
- c# - 我如何制作脚本以在应用程序中导航并按下按钮,登录... c# .net 框架
- ruby-on-rails - 使用嵌套属性将新子级保存到现有父级
- java - 多模块 Gradle 项目作为库