创建有条件的行

我有下表(这只是其中的一部分):

背景是跟踪参与者的不同位置 .
如果位置或多或少相同,则它不是路径的一部分,这是由速度的阈值定义的,该阈值由LEAD()函数计算 . 但如果速度高于1(在这种情况下),该位置是路线的一部分 .

现在我想创建不同的行 .
这意味着,在这种情况下,路线为:
身份2-3
id 7-12
id 13-16
id 17-18

有没有人知道如何自动化这个?

提前致谢!

回答(1)

2 years ago

您似乎想要任何速度为1或前一速度为1的行 . 然后您想要聚合相邻的ID .

您可以通过在当前日期之前严格计算“1”的数量来计算 - 使用窗口函数或算术 . 这是一种方法:

select participant, min(id), max(id)
from (select t.*,
             ( sum( (speed = 0)::0 ) over (partition by participant order by id) - (id = 0)::int ) as grp
      from t
     ) t
group by participant, grp;