SQL实用题型-用户最长连续登陆天数

博客探讨如何使用SQL解决经典问题——计算用户最长连续登录天数。通过创建连续登录标记,利用ROW_NUMBER()函数结合窗口函数进行分组计数,最终找出每个用户的最大连续登录天数。
摘要由CSDN通过智能技术生成

sql经典题型:求用户连续登陆的最长天数

已知:一个简单的用户登陆表:

uid dat
u1 2019/9/1
u1 2019/9/2
u1 2019/9/3
u1 2019/9/8
u1 2019/9/9
u2 2019/9/2
u2 2019/9/3

想要得到:查询结果如下

uid max_day
u1 3
u1 2
u2 2

题目难点:如何求连续登陆的天数

  1. 首先想到的是用 COUNT + GROUP BY 的用法,那么GROUP BY后面用于分组的条件就是连续登陆的标记(分别为连续登陆2天,3天,6天,10 天等等)
  2. 如何对于每一个用户构建连续登陆的标记? 这个时候,很容易就会想到平时算法中的相邻循环加1,但是在SQL中一定要转变这种思维方式,而是思考能不能给这些连续加1的日期打上一个相同的标签,这样子就可以利用这个标签当作GROUP BY分组的条件了。
  3. 用户U1为例,该用户有两次连续登陆的经历,第一次是连续3天,第二次是连续2天,我们只要能对这两次的连续登陆行为打上两个标签,则可以使用GROUP BY对于不同标签组内的数据进行COUNT的计算,从而得到用户的连续登陆天数这一新变量。
  4. 用户U1连续登陆3天的3个数据为例,怎么给着三个数据打上同样的标签呢?此时我们思考,这三个数据DATE1,DATE2,DATE3的关系是数值上依次加1,加入我们可以生成一列同样依次加1的数据R1,R2,R3(如1,2,3),那么DATE1-R1的差值就会等于DATE2-R2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值