基于会话计数器配对事件并在mySQL中查找时间增量
我读过很多涉及SQL中记录配对的问题,但没有一个使用这样的会话计数器。我简化了这个问题的一个通用实例,它应该非常适用于许多人 基本上,我有一个mySQL表,它用时间戳和递增会话计数器记录单个事件,每次新会话都会重置为0,如下所示:基于会话计数器配对事件并在mySQL中查找时间增量,mysql,sql,session,events,Mysql,Sql,Session,Events,我读过很多涉及SQL中记录配对的问题,但没有一个使用这样的会话计数器。我简化了这个问题的一个通用实例,它应该非常适用于许多人 基本上,我有一个mySQL表,它用时间戳和递增会话计数器记录单个事件,每次新会话都会重置为0,如下所示: time counter t0 0 t1 1 t2 2 t3 0 t4 1 t5 0 t6 1 t7 2 t8 3 t9 4 我想获取这些数据,并将每个会话的第一个和最后一个时间戳配对,最后,计算每个会话
time counter
t0 0
t1 1
t2 2
t3 0
t4 1
t5 0
t6 1
t7 2
t8 3
t9 4
我想获取这些数据,并将每个会话的第一个和最后一个时间戳配对,最后,计算每个会话的1行时间增量。所以期望的输出应该是这样的:
start counter end counter
t0 0 t2 2
t3 0 t4 1
t5 0 t9 4
我已经读过一些使用LEAD和LAG函数的解决方案,但是MySQL中没有这种解决方案,我无法理解其他实现。我知道我可以在Excel/Python中强制执行此操作,但是否有一个相对简单的mySQL查询可以完成此操作?您可以使用 这是一个例子
select min(time),max(time),count(*)-1
from
(
select time,counter,
if(@prev>counter,@grp:=@grp+1,@grp:=@grp),
@grp as GRPvalue,
@prev:=counter
from t,(select @prev:=0,@grp:=0) as t1
order by time
) t2
GROUP BY GRPValue
order by min(time)
或者这里是另一个SQL查询。在这里,我们将组定义为当前记录之前的计数器计数=0,如果所有间隔都以0开始:
select min(time),max(time),count(*)-1
from t t1
group by
(select count(*) from t where t.time<=t1.time and counter = 0)