sql - 计算滚动时间段内的记录数 SQL(基于最后一条记录)
问题描述
我对 SQL 比较陌生,并试图从 Oracle SQL 数据库中提取以下内容。
假设我有一个用户表,他们登录的时间如下所示:
姓名 LOG_IN Jim 13:00:05
帕特里克 13:02:23
史蒂夫 13:02:44
艾玛 13:03:16
史蒂夫 13:04:44
吉姆 13:04:05
吉姆 13:05:05
吉姆 13:05:06
帕特里克 13:05:17
艾玛 13:05:18
史蒂夫 13:08:13
假设我想运行一个报告,告诉我他们的最后一次用户登录以及在最后一次登录前 5 分钟的时间范围内发生的所有登录。如果我用另一种语言执行此操作,我只需一个 for .. 循环来获取最后一次登录,然后倒数到以前的登录,并比较登录时间是否在 5 分钟窗口内。我不确定如何使用 Oracle SQL 完成同样的事情。例如,对于像 Jim 这样的人,他的最后一次登录是在 13:05:06,所以我希望他在 13:00:06 和 13:05:06 之间登录的所有时间,这将是:'
名称 LOG_IN
吉姆 13:04:05
吉姆 13:05:05
吉姆 13:05:06
因此,第一次登录(在 13:00:05)将不包括在内,因为它不在范围内。
相同的报告也会返回其他用户的结果,因此对于 Steve,将返回以下内容:
名称 LOG_IN
史蒂夫 13:04:44
史蒂夫 13:08:13
并且不会返回第一次登录(13:02:44)。
当我第一次看到这个时,我认为要求是在报告时间的 5 分钟内提取所有事务,但后来我了解到我需要根据上次登录进行滚动期计算。
解决方案
select Name, LOG_IN
from <table_name> A where LOG_IN >
(select max(LOG_IN) from <table_name> where Name=A.Name)-(1/24./60.*5.);
这是一个sqlfiddle链接: http ://sqlfiddle.com/#!4/b231e/11/0 (不知道会持续多久......)
推荐阅读
- regex - 在 Google 表格中匹配字符串末尾的部分文本
- c# - 将 Listview 数据导出到电子邮件中
- flutter - 如何使用颤振更新 sqflite 中的表
- html - 将字符串数组显示到具有三列角度的表格中
- java - 是否可以在 Android Studio 上的 Java 代码中调用 dart 文件中的 TextField?
- python - 如何从第二个元素开始在python中订购列表列表?
- java - 传递类类型作为参数
- python - 运行因子分析时出现“LinAlgError:特征值未收敛”
- html - 如何用css创建眉毛形状
- java - 如何使用 CompletableFuture 在 Java 8 中将此代码转换为异步?我正在使用 Spring Boot