SQL-获取至少连续登录三天以上的用户

首先准备一下数据

create table login_record (
  userid int ,
  time varchar2(20)
);
 
insert into login_record values (1,'2020-04-18');
insert into login_record values (1,'2020-04-19');
insert into login_record values (1,'2020-04-20');
insert into login_record values(1,'2020-04-21');
insert into login_record values(2,'2020-04-16');
insert into login_record values(2,'2020-04-17');
insert into login_record values(2,'2020-04-18');
insert into login_record values(3,'2020-04-18');
insert into login_record values(4,'2020-04-18');
insert into login_record values(5,'2020-04-18');
insert into login_record values(6,'2020-04-18');
insert into login_record values(7,'2020-04-18');

数据样子

用户每天可能登录多次,现在的数据是进行过去重的,所以目前是用户每天只登陆一次的

现在我们可以使用lead() over()开窗函数 用于获取当前行的下一行 展示如下

代码如下

select userid from (
    select userid,time,lead(time) over (partition by userid order by time) as time1
from login_record
                       )
group by userid,to_date(time,'yyyy-mm-dd')- to_date(time1,'yyyy-mm-dd')
having count(*) >= 2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值