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

 更新时间:2022年01月01日 11:21:08   作者: LUC   
这篇文章介绍了SQL查询至少连续n天登录用户的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

以连续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 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查询至少连续七天下单的用户

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • MySQL 逻辑备份与恢复测试的相关总结

    MySQL 逻辑备份与恢复测试的相关总结

    数据库逻辑备份就是备份软件按照我们最初所设计的逻辑关系,以数据库的逻辑结构对象为单位,将数据库中的数据按照预定义的逻辑关联格式一条一条生成相关的文本文件,以达到备份的目的。本文将具体介绍MySQL 逻辑备份的相关概念及如何做恢复测试。
    2021-05-05
  • Linux(Ubuntu)下mysql5.7.17安装配置方法图文教程

    Linux(Ubuntu)下mysql5.7.17安装配置方法图文教程

    这篇文章主要为大家详细介绍了Linux下mysql5.7.17安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 连接MySQL时出现1449与1045异常解决办法

    连接MySQL时出现1449与1045异常解决办法

    这篇文章主要介绍了连接MySQL时出现1449与1045异常解决办法的相关资料,通过IP链接MySQL的时候会出现1499与1054错误异常的情况,这里提供解决办法,需要的朋友可以参考下
    2017-09-09
  • MySQL union 语法代码示例分析

    MySQL union 语法代码示例分析

    主要介绍的是MySQLunion 语法代码演示,我前两天在相关网站看见MySQLunion 语法代码演示的资料,觉得挺好,就拿出来供大家分享。希望在你今后的学习中会对你有所帮助。
    2010-06-06
  • MySQL基于索引的压力测试的实现

    MySQL基于索引的压力测试的实现

    本文主要介绍了MySQL基于索引的压力测试的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 一文带你学透SQL语言的核心之DML操作

    一文带你学透SQL语言的核心之DML操作

    DML(Data Manipulation Language)是SQL语言的核心部分,其主要用于对数据库的数据进行增删改查,在学习数据时,学习DML操作是必不可少的一部分,本文就带大家详细了解SQL语言的核心DML操作,需要的朋友可以参考下
    2023-06-06
  • MySQL安装出现The configuration for MySQL Server 8.0.28 has failed. You can...错误的解决办法

    MySQL安装出现The configuration for MySQL Server 8.0.28 has

    这篇文章主要给大家介绍了MySQL安装出现The configuration for MySQL Server 8.0.28 has failed. You can...错误的解决办法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • mybatis-plus分页传入参数后sql where条件没有limit分页信息操作

    mybatis-plus分页传入参数后sql where条件没有limit分页信息操作

    这篇文章主要介绍了mybatis-plus分页传入参数后sql where条件没有limit分页信息操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • MySQL性能指标TPS+QPS+IOPS压测

    MySQL性能指标TPS+QPS+IOPS压测

    这篇文章主要介绍了MySQL性能指标TPS+QPS+IOPS压测,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • mysql5.7.13 环境搭建教程(解压缩版)

    mysql5.7.13 环境搭建教程(解压缩版)

    这篇文章主要为大家详细介绍了mysql解压缩版环境搭建教程,具有一定的实用性,感兴趣的小伙伴们可以参考一下
    2016-07-07

最新评论