一文读懂SQL中的连续问题
一、连续问题介绍
程序员小李计划跳槽,最近在优快云上疯狂充电,其登陆优快云的日期如下:
请根据小李的登陆数据,求出其连续登陆信息,具体如下:
1.开始登陆日期
2.结束登陆日期
3.连续登陆天数
4.非连续登陆时距离上次登陆的天数
预期结果是这样的:

二、问题分析及解决方法
想要解决连续问题,总体上要分为两步。
step1:给出连续登陆的分组标识,划定分组
step2:求组内的各种信息
step1:划定分组
-
分析:(认真看!精华在这里)
假设:
每天都登陆的话,则预期间隔(登陆当天距登陆首天的间隔天数)为自增长序列,实际间隔与预计间隔的增长速度相同,且数值相等。
实际:
登陆间断时,实际间隔 不再 (同预计间隔一样)自增长;
连续登陆时,实际间隔 开始( 同预计间隔一样)自增长;
因此:
连续登陆的时间段里,实际间隔与预计间隔的增长速度相同,数值不等,差相等。 -
操作:
在子查询中增加两列:预计间隔和实际间隔;外查询对二者做差,差值相同的记录即为连续登陆的组。
step2:求其他信息
- 开始时间:组内最小的时间,对组内的日期求min
- 结束时间:组内最大的时间,对组内的日期求max
- 连续登陆天数:对组内的数据条数求count
- 距离上次登陆的天数:本组内的首次登陆日期 - 其前一登录日期
(子查询中再增加一列:上一登录日期)
三、代码实现
1.创建表
create table tmptablee(rq datetime);
2.插入数据


最低0.47元/天 解锁文章
1227

被折叠的 条评论
为什么被折叠?



