sql - 如何根据时间戳值过滤持续时间
问题描述
我想根据时间间隔过滤记录,但我有时间戳。我有一个带有以下列名称的表“df”:
id - int 时间 - 时间戳正确性 - 布尔主题 - 文本
每个学生 (id) 完成特定主题 (subject) 的任务。如果分配正确完成,系统在“正确性”列中分配“真”值,否则在“错误”列中分配。学生完成任务的时间(时间)也被系统保存。
我需要编写一个 sql 查询来统计 2020 年 3 月期间在一个小时内成功完成 20 项任务的所有学生。我需要从实际开始时间到实际完成时间计算一小时内完成任务的学生。
提前致谢!
解决方案
您可以使用窗口函数和范围框架:
select distinct id
from (
select
t.*,
count(*) filter(where correctness) over(
partition by id
order by time
range between interval '1 hour' preceding and current row
) cnt
from mytable t
where time >= date '2020-03-01' and time < date '2020-04-01'
) t
where cnt > 20
窗口函数计算同一用户在过去一小时内成功执行了多少任务;然后,您可以使用此信息过滤结果集。
这将为您提供满足条件的用户列表。如果您想要此类用户的计数,请替换select distinct id
为select count(distinct id)
.
推荐阅读
- docker - Owncloud docker 容器未运行(执行格式错误)
- c# - 使用 Web.config 转换删除 appSettings 部分中的属性
- php - 如何解析没有特殊字符的手机号码
- c# - 列插入的实体框架核心条件
- javascript - 如何绑定 3 个输入值?
- c# - Visual Studio for Mac 中的应用程序控制台问题
- java - 向应用程序发送 SAML 响应以进行测试?
- linux - 进入docker后`/etc/group`和host一样
- python - Celery 处理异步任务的问题
- retrofit2 - 如何解析 JSON 并设置为对象模型