计算按时间跨度分组的数据集

时间:2012-03-15 12:20:51

标签: sql

我在带有时间戳值和事件字符串的表中有数据集。我怎样才能获得所有最小的事件。与事件值相同的其他事件相隔5秒。

提供的数据:

TS                         EVENT                           
-------------------------- --------------------------------
2012-03-15 13:09:27.486000 foo                             
2012-03-15 13:09:37.253000 bar                             
2012-03-15 13:09:31.243000 foo                             
2012-03-15 13:09:26.243000 foo                             
2012-03-15 13:09:47.841000 foo                             

结果应为

TS                         EVENT                           
-------------------------- --------------------------------
2012-03-15 13:09:26.243000 foo                             
2012-03-15 13:09:37.253000 bar                             
2012-03-15 13:09:47.841000 foo                             

两个“foo”事件在另一个“foo”事件之前或之后仅3或4秒,因此不应被选中。如果在某个秒范围内存在多个事件,则只应返回第一个事件。

任何暗示都表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:2)

尝试:

with cte as 
(select event, ts, row_number() over (partition by event order by ts) rn
 from myTable)
select t1.event, t1.ts
from cte t1
left join cte t2 
       on t2.event = t1.event and 
          t2.rn=t1.rn+1 and 
          t2.ts <= t1.ts + interval '5' second
where t2.event is null