加入收藏 | 设为首页 | 会员中心 | 我要投稿 海南站长网 (https://www.0898zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何运用mysql计算本年用户最大未登录时间段

发布时间:2022-01-10 16:17:23 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下如何使用mysql计算本年用户最大未登录时间段,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 计算本年用户最大未登录时间段 space_user_task_statisti
        小编给大家分享一下如何使用mysql计算本年用户最大未登录时间段,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
 
         计算本年用户最大未登录时间段
 
         space_user_task_statistics_log 如果用户登录过,则将信息记入该表
          主要信息有用户ID和登录时间
 
space_user 记录用户基本信息. 主要包括用户ID和注册时间信息.
 
需求:
查所有用户在2017年最大的未登录时间段
 
如果用户在2017年才注册,那么有效时间从注册时间开始算。
 
其实这是一个MySQL计算连续范围的问题。
 
 
SQL
<ol start="1" class="dp-sql" white-space:normal;">
 
select userid,startdate,enddate,diff from (  
    select t3.*,when userid=@gid then @rn:=@rn+1 when @gid:=userid then @rn:=1 end rank  
    from (  
        select userid,dt-interval rn min(dt) startdate,max(dt) enddate,    
        datediff(max(dt),min(dt)) diff  
        from (  
            select   
            cal.dt,cal.userid,when cal.userid=@gid then @rn:=@rn+1 when @gid:=cal.userid then @rn:=1 end rn  
            from   
            (  
                select dt,userid from (  
                    select '2017-01-01'+interval id-1 from nums,(select @gid:=0,@rn:=0) vars where id<=dayofyear(now())  
                ) var,  
                (  
                    select u.userid,u.registertime from space_user u   
                    where exists(select * from space_user_task_statistics_log l where l.createDate>='2017-01-01' and l.userid=u.userid)  
                ) userlist  
                where dt>=date(userlist.registertime)  
            ) cal   
            join   
            (  
                select log.userid,log.createDate from   
                space_user_task_statistics_log log     
                where log.loginflag=1 and  log.createDate>='2017-01-01'   
            ) t1 on(t1.userid=cal.userid and cal.dt=t1.createDate)  
            where createdate is null  
            order by userid,dt  
        ) t2   
        group by userid,dt-interval rn order by userid,diff  desc  
) t4 where rank=1  
order by diff desc;  
 
生产查询一次耗时10分钟左右.
 
diff 是最大未登录时间段的天数.
 
以上是“如何使用mysql计算本年用户最大未登录时间段”这篇文章的所有内容,感谢各位的阅读!

(编辑:海南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!