有一些我无法理解的东西
原始数据每 15 分钟显示一次,我想根据它们是否是连续的 15 分钟间隔对它们进行分组(请参见下面的屏幕截图)我想为每个用户和许多用户多次执行此操作...关于如何仅使用可扩展到 1000 个用户的 sql 来执行此操作的任何想法?
任何帮助都会受到赞赏
谢谢
答案 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;