首页 > 解决方案 > 计算滚动时间段内的记录数 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 分钟内提取所有事务,但后来我了解到我需要根据上次登录进行滚动期计算。

标签: sqloracle

解决方案


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 (不知道会持续多久......)


推荐阅读