我在带有时间戳值和事件字符串的表中有数据集。我怎样才能获得所有最小的事件。与事件值相同的其他事件相隔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秒,因此不应被选中。如果在某个秒范围内存在多个事件,则只应返回第一个事件。
任何暗示都表示赞赏!谢谢!
答案 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