MySQL计算连续3天登陆的用户
2023-05-25 10:39:17
作者: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
(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天登陆内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
MySQL计算连续3天登陆的用户
2023-05-05
浅谈mysql数据库事物隔离级别
2023-05-05
MySql中now()与sysdate()区别小结
2023-05-05
浅谈慢SQL优化之索引的作用
2023-05-05
美国设下计谋,用娘炮文化重塑日本,已影响至中国
2021-11-19
时空伴随者是什么意思?时空伴随者介绍
2021-11-09
工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
2021-11-05
2022年放假安排出炉:五一连休5天 2022年所有节日一览表
2021-10-26
电脑版
-
返回首页
2006-2023 脚本之家 JB51.Net , All Rights Reserved.
苏ICP备14036222号