Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于会话计数器配对事件并在mySQL中查找时间增量_Mysql_Sql_Session_Events - Fatal编程技术网

基于会话计数器配对事件并在mySQL中查找时间增量

基于会话计数器配对事件并在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 我想获取这些数据,并将每个会话的第一个和最后一个时间戳配对,最后,计算每个会话

我读过很多涉及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
我想获取这些数据,并将每个会话的第一个和最后一个时间戳配对,最后,计算每个会话的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)