分组连续时间戳 (Redshift)

时间:2021-02-09 02:42:42

标签: sql amazon-web-services amazon-redshift

有一些我无法理解的东西

原始数据每 15 分钟显示一次,我想根据它们是否是连续的 15 分钟间隔对它们进行分组(请参见下面的屏幕截图)我想为每个用户和许多用户多次执行此操作...关于如何仅使用可扩展到 1000 个用户的 sql 来执行此操作的任何想法?

enter image description here

任何帮助都会受到赞赏

谢谢

1 个答案:

答案 0 :(得分:0)

这是一种间隙和孤岛问题。使用 lag() 获得差值,然后使用累积总和来识别组:

select user_id, min(start_time), max(end_time)
from (select t.*,
             sum( case when prev_end_time <> start_time then 0 else 1 end) over (partition by user_id order by start_time) as grp
      from (select t.*,
                   lag(end_time) over (partition by user_id order by start_time) as prev_end_time
            from t
           ) t
     ) t
group by user_id, grp;