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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值