如何在Oracle中选择最密集的1分钟

Bop*_*Bop 2 sql oracle oracle11g

我有时间戳列表tmstmp,这个表包含某些事件的日志.我需要找出在1分钟间隔内发生的最大数量事件.

请仔细阅读!我不是要提取的时间戳极小部分,总结如下:

select count(*), TO_CHAR(tmstmp,'MI') 
   from log_table 
     group by TO_CHAR(tmstmp,'MI')
     order by TO_CHAR(tmstmp,'MI');
Run Code Online (Sandbox Code Playgroud)

它需要取第一条记录,然后向前看,直到它从1号和1号记录中选择所有记录,然后取2号并做同样的事情.

结果必须有一个记录集(总和,开始时间戳).

任何人都有一个代码片段并且愿意分享吗?

Mar*_*ber 6

具有逻辑窗口的分析函数可以直接提供此信息:

select l.tmstmp,
count(*) over (order by tmstmp range between current row and interval '59.999999' second following) cnt
from log_table l
order by 1
;

TMSTMP                             CNT
--------------------------- ----------
01.01.16 00:00:00,000000000          4 
01.01.16 00:00:10,000000000          4 
01.01.16 00:00:15,000000000          3 
01.01.16 00:00:20,000000000          2 
01.01.16 00:01:00,000000000          3 
01.01.16 00:01:40,000000000          2 
01.01.16 00:01:50,000000000          1
Run Code Online (Sandbox Code Playgroud)

请调整间隔长度以获得精确度.它必须是低于1分钟的最高值.

要获得最大分钟,请使用子查询(并且不要忘记您可能会收到更多的那条记录 - 使用MAX计数):

with tst as (
select l.tmstmp,
count(*) over (order by tmstmp range between current row and interval '59.999999' second following) cnt
from log_table l)
select * from tst where cnt = (select max(cnt) from tst);

TMSTMP                             CNT
--------------------------- ----------
01.01.16 00:00:00,000000000          4 
01.01.16 00:00:10,000000000          4 
Run Code Online (Sandbox Code Playgroud)