如何运用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计算本年用户最大未登录时间段”这篇文章的所有内容,感谢各位的阅读! (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐