我在Oracle 11g中有一个表LOGIN_DETAILS
,其中保存了每次登录后的用户详细信息。我想在任何30分钟的时间间隔内获取超过5次登录的用户的姓名。基于计数并在一定的时间间隔内提取记录
例子:
考虑以下记录:
在上面记录MACK做内17年7月8日5点10分17秒和17年7月8日6个登录05:40:17这是间隔30分钟内。 所以查询应该返回名称'MACK'作为输出。
注:30分钟间隔没有预先定义的,即它不从均为30分钟间隔应该开始定义。
在此先感谢。
我在Oracle 11g中有一个表LOGIN_DETAILS
,其中保存了每次登录后的用户详细信息。我想在任何30分钟的时间间隔内获取超过5次登录的用户的姓名。基于计数并在一定的时间间隔内提取记录
例子:
考虑以下记录:
在上面记录MACK做内17年7月8日5点10分17秒和17年7月8日6个登录05:40:17这是间隔30分钟内。 所以查询应该返回名称'MACK'作为输出。
注:30分钟间隔没有预先定义的,即它不从均为30分钟间隔应该开始定义。
在此先感谢。
使用lag()
。下面得到最后一行时,有5在30分钟内:
select t.*
from (select t.*,
lag(login_timestamp, 4) over (partition by unique_code order by login_timestamp) as prev_lt
from t
) t
where login_timestamp < prev_lt + interval '30' minute;
注意,lag()
追溯到4条记录,因为目前战绩是第五。
类似的东西
with t as (
select 'Mack' Name, sysdate-0.05 tt from dual
union all
select 'Mack' Name, sysdate-0.03 from dual
union all
select 'Mack' Name, sysdate-0.04 from dual
union all
select 'Angel' Name, sysdate-0.005 from dual
)
select name, min(tt), max(tt), (max(tt) - min(tt)) * 24 * 60, count(*)
from t
group by name
having count(*) > 2 -- qnt of logins
and (max(tt) - min(tt)) * 24 * 60 > 20 -- interval 20 min