千家信息网

SQL怎么查询连续登录的用户情况

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

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

以连续3天为例,使用工具:MySQL。

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怎么查询连续登录的用户情况"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0