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

时间:2015-05-28 22:51:05

标签: java sql oracle

我在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来想办法,但不知道如何置换重叠事件。

2 个答案:

答案 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);
    }

}