gpt4 book ai didi

java - 根据 timeStart 和 timeEnd 值选择最大并发记录数

转载 作者:行者123 更新时间:2023-12-02 04:38:07 26 4
gpt4 key购买 nike

我在 Oracle 服务器中有一个 SQL 表,其中包含事件的开始时间和结束时间值,并且希望通过 SQL 查询了解同一秒内发生的并发事件的最大数量(如果可能)。

我的表结构是:

EventID    StartTime   EndTime
===================================
12345 10:25:50 10:25:59
12346 10:25:51 10:26:00
12347 10:25:55 10:26:10

我尝试进行查询,选择小时、分钟和秒作为单独的字段,并按它们对记录进行分组,但由于我有时间范围,所以我不知道如何检查它们何时重叠(因为它们是同时执行的,如果他们有重叠的时间)。

如果不可能作为查询,您能给我推荐一种在 Java 中计算此数据的有效方法吗?我可以通过循环 ResultSet 想到一种方法,但不知道如何排列重叠事件。

最佳答案

创建一个包含增量的所有时间的列表 - 事件开始时 +1,事件结束时 -1。

然后用累加求和得到任意时刻的总活跃度并拉取最大值:

with times as (
select starttime as t, +1 as inc
from structure
union all
select endtime, -1
from structure
)
select t.*
from (select t, sum(inc) over (order by t) as actives
from (select t, sum(inc) as inc
from times
group by t
) t
order by actives desc
) t
where rownum = 1;

最里面的子查询(带有group by)只是为了处理同时发生的事情。

关于java - 根据 timeStart 和 timeEnd 值选择最大并发记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30518352/

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