MySQL计算连续3天登陆的用户

 更新时间:2023年05月25日 10:41:51   作者:sdez12  
本文主要介绍了MySQL计算连续3天登陆的用户,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

题目

table_a ( 用户userid和登录时间time)求连续登录3天的用户数。

一、解题思路

①可以使用窗口函数,根据用户分组然后再根据登录时间升序,再进行编号,这里的编号函数可以使用row_number()、dense_rank()、rank()都可以,因为同一用户不可能在同一时间登录,所以同一用户不可能出现两个完全相同的时间。
②如果两个时间连续,必定登录的时间减去编号天数是相同的
③相同个数大于3的用户即为所求

二、具体步骤

1.窗口函数得到编号(date_)

代码如下(示例):

SELECT * ,dense_rank() OVER(PARTITION BY userid ORDER BY time)date_ FROM user

运行结果如图:

2.使用登录时间减去编号对应的天数得到参照时间(flag_date),再将参照日期用date()函数转换为日期

代码如下(示例):

SELECT *,date(date_sub(time,INTERVAL  date_ DAY )) flag_date FROM (
SELECT * ,dense_rank() OVER(PARTITION BY userid ORDER BY time)date_ FROM user)a

运行结果如图:

3.最后根据userid和flag_date分组,并统计次数,次数大于等于3即为所求

代码如下(示例):

SELECT userid FROM (SELECT userid,
                           DATE(DATE_SUB(time, INTERVAL date_ DAY)) flag_date
                    FROM
                        (SELECT *, DENSE_RANK() OVER (PARTITION BY userid ORDER BY time) date_ FROM user) a
                    GROUP BY userid, flag_date
HAVING
    COUNT(flag_date) >= 3) b

三、题目使用的表和数据

CREATE TABLE `user` (
  `userid` int DEFAULT NULL,
  `time` datetime DEFAULT NULL
);
INSERT INTO user VALUES (1,'2019-01-01 12:34:22'),(2,'2019-01-01 12:22:22'),
                        (3,'2019-01-03 12:34:22'),(1,'2019-01-02 12:34:22'),
                        (2,'2019-01-03 12:34:20'),(3,'2019-01-03 12:34:10'),
                        (2,'2019-01-04 12:34:20'),(1,'2019-01-03 12:34:20'),
                        (3,'2019-01-02 12:34:20'),(4,'2022-08-01 19:43:00'),
                        (4,'2022-08-02 19:43:09'),(3,'2019-01-04 12:34:20')

到此这篇关于MySQL计算连续3天登陆的用户的文章就介绍到这了,更多相关MySQL 连续3天登陆内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL8.4一主一从环境搭建实现

    MySQL8.4一主一从环境搭建实现

    本文主要介绍了MySQL8.4一主一从环境搭建实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Can’t open file:''[Table]mytable.MYI''

    Can’t open file:''[Table]mytable.MYI''

    也许很多人遇到过类似Can’t open file: ‘[Table]mytable.MYI’ 这样的错误信息,却不知道怎么解决他,下面我们做个介绍,
    2011-01-01
  • 深入理解where 1=1的用处

    深入理解where 1=1的用处

    本篇文章是对where 1=1的用处进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 解决Windows10下mysql5.5数据库命令行中文乱码问题

    解决Windows10下mysql5.5数据库命令行中文乱码问题

    重置系统后,很久之前安装的MySQL数据库出现了控制台查询中文乱码问题,时间太久早已经不记得怎么设置了。下面通过本文给大家分享Windows10下解决MySQL5.5数据库命令行中文乱码问题,一起看看吧
    2017-07-07
  • 详解MySQL 查询语句的执行过程

    详解MySQL 查询语句的执行过程

    这篇文章主要介绍了详解MySQL 查询语句的执行过程,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • MySQL 导出和导入数据的几种实现方式

    MySQL 导出和导入数据的几种实现方式

    本文主要介绍了MySQL 导出和导入数据的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • MySQL: mysql is not running but lock exists 的解决方法

    MySQL: mysql is not running but lock exists 的解决方法

    下面可以参考下面的方法步骤解决。最后查到一个网友说可能和log文件有关,于是将log文件给移除了,再重启MySQL终于OK了
    2009-06-06
  • MySQL创建全文索引分享

    MySQL创建全文索引分享

    使用索引是数据库性能优化的必备技能之一。在MySQL数据库中,有四种索引:聚集索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX)
    2017-01-01
  • MySql是否需要commit详解

    MySql是否需要commit详解

    在本篇文章里小编给大家分享了关于MySql是否需要commit的相关知识点内容,需要的朋友们跟着操作下。
    2019-05-05
  • 如何选择合适的MySQL日期时间类型来存储你的时间

    如何选择合适的MySQL日期时间类型来存储你的时间

    这篇文章主要介绍了如何选择合适的MySQL日期时间类型来存储你的时间,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-08-08

最新评论