gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:45:54 25 4
gpt4 key购买 nike

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

请仔细阅读!我想要像这样提取时间戳分钟分数和总和:

select count(*), TO_CHAR(tmstmp,'MI') 
from log_table
group by TO_CHAR(tmstmp,'MI')
order by TO_CHAR(tmstmp,'MI');

它需要取第一条记录然后向前看,直到它选择从第一条开始的 1 分钟内的所有记录并对记录数求和,然后取第二条并执行相同的操作等。

因此必须有一个记录集(总和,开始时间戳)。

有人在某处有一段代码并愿意分享吗?

最佳答案

带有逻辑窗口的分析函数可以直接提供这些信息:

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

请根据您的精度调整间隔长度。它必须是低于 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

关于sql - 如何在 Oracle 中选择最密集的 1 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37909267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com