mysql最大连续登录天数_sql技巧(三)在线时长|最大连续登陆天数|登录时间间隔...

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-28 19:45   11   0

1.在线时长

正常的游戏有登录和登出但是我们想计算下在线时长,这就涉及到根据登陆表的登录时间查找登出时间的问题,基本的原理是登陆表和登出表进行匹配,查找离一条登录记录最近的登出时间即min(登出-登录)>0

62ea42ed3ab5

在线时长

2.最大连续登陆天数

游戏登录表记录的是游戏,用户登陆的记录,有些时候我们需要统计用户的最大连续登陆天数,这就面临一个棘手的问题,如何判断是否连续,19日前面是18日的话是连续的,19日前面是17日的话就是不连续的,我们需要定义一个变量来存储,开始的日期,还有...........

先看下结果

62ea42ed3ab5

最大连续登陆天数

62ea42ed3ab5

计算登录时间间隔

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.计算连续天数和累计付费金额

62ea42ed3ab5

原始数据

62ea42ed3ab5

需要得到的结果

第一步,得到每一个连续日期的最早开始日期,有点绕口 直接看图

62ea42ed3ab5

得到连续的日期

第二部,对中间的结果进行汇总统计

62ea42ed3ab5

得到最终结果

代码解读:

62ea42ed3ab5

代码解读

可用代码:

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP