最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 服务器 > 系统运维 >
连续登陆最大天数如何统计?
CSDN发表于 2020-09-14 15:43 次浏览
在网站平台类业务需求中用户的「最大登陆天数」的需求比较普遍,那么我们要怎样计算出连续登陆最大天数呢?下面文章我们来详细学习一下:

计算用户连续登录的最大天数(这里使用prestoSql,使用hive也可以),先看下登录日志数据表hive.traffic.access_user只有两个字段:uid,day;日期辅助表hive.ods.dim_date,这个表只有一个字段day;
先说下思路,

uid day rownumber day-rownumber【days】
101 20190911 1 20190911-1=20190910
101 20190912 2 20190912-2=20190910
101 20190913 3 20190913-3=20190910
101 20190916 4 20190916-4=20190912
101 20190917 5 20190917-5=20190912

从上可以看到,只要是连续登录的话,day-rownumber的差值是一样的,那问题来了,这样的减法在跨月或者跨年的时候会出问题,所以我们首先将日期转换成有序的数字

  • 1   select day,ROW_NUMBER() OVER(ORDER BY day) daynum from hive.ods.dim_date

接下来,我们需要将用户登录日志按照uid分组,然后按照日期排序,然后计算出rownumber

  • 1   with a as (select uid,day from hive.traffic.access_user where day>=20190801 and uid<>'')
  • 2   select uid,day,ROW_NUMBER() OVER(PARTITION BY uid ORDER BY uid,day) rownum from a group by day,uid

接下来就是计算差值,差值相同的代表连续登录日期,完整sql如下

  • 1  with a as (select uid,day from hive.traffic.access_user where day>=20190801 and uid<>''),
  • 2   b as (select uid,day,ROW_NUMBER() OVER(PARTITION BY uid ORDER BY uid,day) rownum from a group by day,uid ),
  • 3   c as(select day,ROW_NUMBER() OVER(ORDER BY day) daynum from hive.ods.dim_date),
  • 4   d as (select uid,b.day,daynum,rownum,daynum-rownum days from b join c on b.day=c.day )
  • 5   select uid,min(day)"连续登录开始日",count(*) "连续登录天数" from d group by uid,days

end

标签:连续登陆
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐