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号并做同样的事情.
结果必须有一个记录集(总和,开始时间戳).
任何人都有一个代码片段并且愿意分享吗?
具有逻辑窗口的分析函数可以直接提供此信息:
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)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |