ITPub博客

首页 > 数据库 > MySQL > 计算本年用户最大未登录时间段

计算本年用户最大未登录时间段

原创 MySQL 作者:壹頁書 时间:2017-12-14 11:13:20 0 删除 编辑
 计算本年用户最大未登录时间段

space_user_task_statistics_log 如果用户登录过,则将信息记入该表
主要信息有用户ID和登录时间


space_user 记录用户基本信息. 主要包括用户ID和注册时间信息.

需求:
查所有用户在2017年最大的未登录时间段

如果用户在2017年才注册,那么有效时间从注册时间开始算。

其实这是一个MySQL计算连续范围的问题。

http://blog.itpub.net/29254281/viewspace-1385638/

SQL
  1. select userid,startdate,enddate,diff from (  
  2.     select t3.*,case when userid=@gid then @rn:=@rn+1 when @gid:=userid then @rn:=1 end rank  
  3.     from (  
  4.         select userid,dt-interval rn day c,min(dt) startdate,max(dt) enddate,    
  5.         datediff(max(dt),min(dt)) diff  
  6.         from (  
  7.             select   
  8.             cal.dt,cal.userid,case when cal.userid=@gid then @rn:=@rn+1 when @gid:=cal.userid then @rn:=1 end rn  
  9.             from   
  10.             (  
  11.                 select dt,userid from (  
  12.                     select '2017-01-01'+interval id-1 day dt from nums,(select @gid:=0,@rn:=0) vars where id<=dayofyear(now())  
  13.                 ) var,  
  14.                 (  
  15.                     select u.userid,u.registertime from space_user u   
  16.                     where exists(select * from space_user_task_statistics_log l where l.createDate>='2017-01-01' and l.userid=u.userid)  
  17.                 ) userlist  
  18.                 where dt>=date(userlist.registertime)  
  19.             ) cal   
  20.             left join   
  21.             (  
  22.                 select log.userid,log.createDate from   
  23.                 space_user_task_statistics_log log     
  24.                 where log.loginflag=1 and  log.createDate>='2017-01-01'   
  25.             ) t1 on(t1.userid=cal.userid and cal.dt=t1.createDate)  
  26.             where createdate is null  
  27.             order by userid,dt  
  28.         ) t2   
  29.         group by userid,dt-interval rn day  
  30.     ) t3   
  31.     order by userid,diff  desc  
  32. ) t4 where rank=1  
  33. order by diff desc;  

生产查询一次耗时10分钟左右.


diff 是最大未登录时间段的天数.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2148691/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 查询前50%的数据
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339926