一文读懂SQL中的连续日期、连续登陆问题

一、连续问题介绍

程序员小李计划跳槽,最近在优快云上疯狂充电,其登陆优快云的日期如下:

小李的登陆日期

请根据小李的登陆数据,求出其连续登陆信息,具体如下:

1.开始登陆日期
2.结束登陆日期
3.连续登陆天数
4.非连续登陆时距离上次登陆的天数

预期结果是这样的:

预期结果

二、问题分析及解决方法

想要解决连续问题,总体上要分为两步。

step1:给出连续登陆的分组标识,划定分组
step2:求组内的各种信息

step1:划定分组
  1. 分析:(认真看!精华在这里)

    假设
    每天都登陆的话,则预期间隔(登陆当天距登陆首天的间隔天数)为自增长序列,实际间隔与预计间隔的增长速度相同,且数值相等
    实际:
    登陆间断时,实际间隔 不再 (同预计间隔一样)自增长;
    连续登陆时,实际间隔 开始( 同预计间隔一样)自增长;
    因此:
    连续登陆的时间段里,实际间隔与预计间隔的增长速度相同,数值不等,差相等。

  2. 操作:

    在子查询中增加两列:预计间隔和实际间隔;外查询对二者做差,差值相同的记录即为连续登陆的组

step2:求其他信息
  1. 开始时间:组内最小的时间,对组内的日期求min
  2. 结束时间:组内最大的时间,对组内的日期求max
  3. 连续登陆天数:对组内的数据条数求count
  4. 距离上次登陆的天数:本组内的首次登陆日期 - 其前一登录日期
    (子查询中再增加一列:上一登录日期)

三、代码实现

1.创建表
create table tmptablee(rq datetime);
2.插入数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值