千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要为大家展示了"如何使用SQL查询至少连续n天登录的用户",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用SQL查询至少连续n天登录的用户"
千家信息网最后更新 2026年11月03日如何使用SQL查询至少连续n天登录的用户

这篇文章主要为大家展示了"如何使用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 ordewhere 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 ordewhere 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 ordewhere orders is not NULL) a) bgroup by b.date_sub,idhaving count(*) >= 3;

查看数据:

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

0