在postgres中如何在事件日志类型表(具有时间戳)

时间:2016-07-26 18:27:11

标签: sql postgresql amazon-redshift

我有一个包含这样数据的表

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) 

我认为可能有一种方法可以使用分析函数来解决这个问题,但我还是无法使用解决方案。

1 个答案:

答案 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