oracle 时间累积合并计算

【问题】

       请教一个问题:
如果我通过sql查询能检索出来多条时间段,我怎么快速计算出来时间。
举例:
我的检索结果:
  2014-9-1 10
00  2014-9-2 1130
  2014-9-1 10
30  2014-9-2 1100
  2014-9-3  11
00  2014-9-4 1200
由于第二段时间包含在第一段时间之内,所以程序要检测出来,同时只用第一段时间的和+第三段时间的和(第三段时间是独立的)]

【回答】

       Oracle下可以借助递归查询(connect by)语句,但由于集合无序,这个语句还是挺难想明白的,而且需求再复杂些就更难写了(比如把重复时间段聚合等)。这种数据量不大的情况下,SPL要灵活简单一些,下面给出几种实现写法:


A

1

$select * from SHIP_BERTH order by S

2

=A1.group@i(S>max(E[,-1]))

3

=A2.new(~.min(S): S,~.max(E): E)

4

=A3.sum(interval@s(S,E))

5

=A1.select(E>E[-1]).sum(interval@s(max(S,E[-1]),E))

A1sql取数,按S排序

A2:将时间段有重叠的分为一组

A3:构建新序表,取每组最小值为S,最大值为E

A4:如果除了看明细,还需要知道汇总时间,可通过interval取得每组时间段的时间间隔并通过sum聚合

A5:如果仅仅只需要汇总时间,可以直接将重叠时间段剔除后对总时间段汇总

写好的脚本如何在应用程序中调用,可以参考Java 如何调用 SPL 脚本