分组后成员的再分组

【问题】

现在有这么一个需求,一个表中记录了各个地点的报警开始时间,结束时间。
现在想统计,各个地点报警次数和时长,时长 = 结束时间 - 开始时间。
要求,同一个地点,开始时间间隔超过 10 分钟的,这个地点要在结果中再出现一次,10 分钟之内的假如有多条,统计条数和报警时长,时长 =10 分钟内各条时长之和。

大家有什么好的思路没。

ID 地点ID 开始时间 结束时间  
1    1    2015/6/8 0:01:00    2015/6/8 0:02:00  
2    1    2015/6/8 0:13:00    2015/6/8 0:14:00  
3    1    2015/6/8 0:14:00    2015/6/8 0:15:00  
4    1    2015/6/8 0:15:00    2015/6/8 0:16:00  
5    2    2015/6/8 0:02:00    2015/6/8 0:03:00  
6    2    2015/6/8 0:06:00    2015/6/8 0:07:00  
7    2    2015/6/8 0:37:00    2015/6/8 0:38:00  

希望结果是:

地点ID时长次数  
1    1    1  
1    3    3  
2    2    2  
2    1    1

【回答】

这类有序的计算用 SQL 很麻烦,如果是 JAVA+SQL 的环境,用 SPL 写脚本要比 SQL 清晰易懂许多:

AB
1$select 地点ID,开始时间,结束时间from tb order by 地点ID,开始时间
2=create(地点ID,时长,次数)
3=A1.group(地点ID)
4for A3=A4.开始时间
5=A4.group(interval@s(B4,开始时间)\600)
6=A2.insert(0:B5,~.地点ID,~.sum(interval@s(开始时间,结束时间))\60,~.len())

A1:执行 SQL 取数,按地点、开始时间排序

A2:创建目标空结果集

A3:按地点分组,保留分组成员,便于后续计算使用

A4-B6:循环地点分组,B4 取得每组第一个开始时间,B5 通过当前开始时间与第一个开始时间间隔(10 分钟)将成员分组,最后通过 B6 将分组结果写回到 A2 结果序表中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值