我有一个包含这样数据的表
event_type event_cnt timestamp
abc 2 2016-1-1 20:08:01
abc 3 2016-1-1 20:10:01
xyz 10 2016-1-1 20:10:01
abc 1 2016-1-1 20:15:01
xyz 5 2016-1-1 20:30:01
xyz 5 2016-1-1 20:31:01
我想要一个结果,它是2分钟内event_cnt的总和(簇)。
event_type event_cnt_within_2_min
abc 5 (which is 2+3 in two minutes)
xyz 10
abc 1
xyz 10 (which is 5+5 in two minutes)
我认为可能有一种方法可以使用分析函数来解决这个问题,但我还是无法使用解决方案。
答案 0 :(得分:2)
您可以使用引导功能检查下一个事件是否在接下来的2分钟内插入。
select event_type,
sum(case when datediff(minute,timestamp,lead_timestamp)<=2 then lead_event_cunt else 0 end) +
sum(event_cnt) as event_cunt_within_2_min
from(
select event_type,event_cnt,timestamp,
lead (timestamp,1) over (partition by event_type order by timestamp) as lead_timestamp,
lead (event_cunt,1) over (partition by event_type order by timestamp) as lead_event_cunt,
from mytable)
group by 1