新西兰服务器

如何使用SQL查询至少连续n天登录的用户


如何使用SQL查询至少连续n天登录的用户

发布时间:2022-01-02 17:53:25 来源:高防服务器网 阅读:64 作者:小新 栏目:开发技术

这篇文章主要为大家展示了“如何使用SQL查询至少连续n天登录的用户”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用SQL查询至少连续n天登录的用户”这篇文章吧。

1.创建SQL表:

create table if not exists orde(id varchar(10),date datetime,orders varchar(10));  insert into orde values('1' , '2019/1/1',10 );  insert into orde values('1' , '2019/1/2',109 );  insert into orde values('1' , '2019/1/3',150 );  insert into orde values('1' , '2019/1/4',99);  insert into orde values('1' , '2019/1/5',145);  insert into orde values('1' , '2019/1/6',1455);  insert into orde values('1' , '2019/1/7',199);  insert into orde values('1' , '2019/1/8',188 );  insert into orde values('4' , '2019/1/1',10 );  insert into orde values('2' , '2019/1/2',109 );  insert into orde values('3' , '2019/1/3',150 );  insert into orde values('4' , '2019/1/4',99);  insert into orde values('5' , '2019/1/5',145);  insert into orde values('6' , '2019/1/6',1455);  insert into orde values('7' , '2019/1/7',199);  insert into orde values('8' , '2019/1/8',188 );  insert into orde values('9' , '2019/1/1',10 );  insert into orde values('9' , '2019/1/2',109 );  insert into orde values('9' , '2019/1/3',150 );  insert into orde values('9' , '2019/1/4',99);  insert into orde values('9' , '2019/1/6',145);  insert into orde values('9' , '2019/1/9',1455);  insert into orde values('9' , '2019/1/10',199);  insert into orde values('9' , '2019/1/13',188 );

查看数据表:

2.使用row_number() over()  排序函数计算每个id的排名,SQL如下:

select *,row_number() over(partition by id order by date ) 'rank'  from orde  where orders is not NULL;

查看数据表:

 3.将date日期字段减去rank排名字段,SQL如下:

select *,DATE_SUB(a.date,interval a.rank day) 'date_sub'  from(  select *,row_number() over(partition by id order by date ) 'rank'  from orde  where orders is not NULL  ) a;

查看数据:

4.根据id和date分组并计算分组后的数量(count)、计算最早登录和最晚登录的时间,SQL如下:

select b.id,min(date) 'start_time',max(date) 'end_time',count(*) 'date_count'  from(  select *,DATE_SUB(a.date,interval a.rank day) 'date_sub'  from(  select *,row_number() over(partition by id order by date ) 'rank'  from orde  where orders is not NULL  ) a  ) b  group by b.date_sub,id  having count(*) >= 3  ;

 查看数据:

以上是“如何使用SQL查询至少连续n天登录的用户”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注高防服务器网行业资讯频道!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[