1.在线时长
正常的游戏有登录和登出但是我们想计算下在线时长,这就涉及到根据登陆表的登录时间查找登出时间的问题,基本的原理是登陆表和登出表进行匹配,查找离一条登录记录最近的登出时间即min(登出-登录)>0
在线时长
2.最大连续登陆天数
游戏登录表记录的是游戏,用户登陆的记录,有些时候我们需要统计用户的最大连续登陆天数,这就面临一个棘手的问题,如何判断是否连续,19日前面是18日的话是连续的,19日前面是17日的话就是不连续的,我们需要定义一个变量来存储,开始的日期,还有...........
先看下结果
最大连续登陆天数
计算登录时间间隔
SET @num:=0; #开始日期
SET @type:=""; # 存放useid
SET @lastdate:="2018-01-01";
SET @b=0;
SELECT userid
,logdate
,@lastdate,
@b:=IF(@type=userid ,DATEDIFF(logdate,@lastdate),0) as num2
,@type:=userid
,@lastdate:=logdate
FROM
(
SELECT id as userid ,date(date ) as logdate
FROM 20180704rolelogin
GROUP BY id ,date(date )
) as a ;
3.计算连续天数和累计付费金额
原始数据
需要得到的结果
第一步,得到每一个连续日期的最早开始日期,有点绕口 直接看图
得到连续的日期
第二部,对中间的结果进行汇总统计
得到最终结果
代码解读:
代码解读
可用代码:
SET @a:='2018-05-03' , @b:='',@c:=0; #定义临时变量
SELECT name ,a as startdate,MAX(date) as enddate,sum(pay) as money
FROM
#核心部分
(SELECT name,@a:=IF((DATEDIFF(date,@a)=@c)and(@b=name),@a,date) as a ,
#如果日期连续就保持不变,否则重置为当前日期
date,pay,@b:=NAME #作为辅助列区分不同的name
,@c:=DATEDIFF(date,@a)+1 #日期差加1作为,下一个日期的判断标准
FROM xiaozhan as a ) as a
GROUP BY name,a