我在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来想办法,但不知道如何置换重叠事件。
答案 0 :(得分:2)
创建一个包含增量的所有时间的列表 - 事件开始时为+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
)只是为了处理在同一时间发生的事情。
答案 1 :(得分:0)
package test3;
import java.util.Scanner;
public class maximumnumbercheck {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a,b;
System.out.println("Enter A Value");
Scanner max=new Scanner(System.in);
a=max.nextInt();
System.out.println("Enter B Value");
b=max.nextInt();
max.close();
String msg=(a>=b)? " A is Maximum NUmber " :" b Is Maximum Number";
System.out.println("msg "+msg);
}
}