提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 题目
  • 一、解题思路
  • 二、具体步骤
    • 1.窗口函数得到编号(date_)
    • 2.使用登录时间减去编号对应的天数得到参照时间(flag_date),再将参照日期用date()函数转换为日期
    • 3.最后根据userid和flag_date分组,并统计次数,次数大于等于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_dateFROM(SELECT *, DENSE_RANK() OVER (PARTITION BY userid ORDER BY time) date_ FROM user) aGROUP BY userid, flag_date
HAVINGCOUNT(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天登陆的用户相关推荐

  1. MySQL 计算连续涨跌

    [问题] Hello i'm trying to create a rally Up rally DOWN stock indicator. i have thre columns : Date    ...

  2. 【MySQL】MySQL统计连续登录3天的用户

    需求 假设有下列表(user_login),第一列为id,第二列为登陆时间(dt),该表记录了每个id的登陆时间 现在要统计指定7天内连续登录3天以上的用户,结果如下 解决方案 由于存在同一用户同一天 ...

  3. mysql连续登录5天以上用户,【SQL】查询连续登陆7天以上的用户

    查询7天连续登陆用户这个问题很经典,解决方法也有很多,这里我讲一下笔者的方法,希望对大家有帮助. 具体思路: 1.因为每天用户登录次数可能不止一次,所以需要先将用户每天的登录日期去重. 2.再用row ...

  4. mysql 连续天数_mysql计算连续天数,mysql连续登录天数,连续天数统计

    mysql计算连续天数,mysql连续登录天数,连续天数统计 >>>>>>>>>>>>>>>>>& ...

  5. 未授予用户在此计算机上的请求登陆类型处理办法

    未授予用户在此计算机上的请求登陆类型处理办法 听语音 原创 | 浏览:62154 | 更新:2013-08-23 15:21 | 标签:计算机 返回 暂停 重播 播放 x <div class= ...

  6. 计算连续登陆最大天数

    计算连续登陆最大天数 原始数据: u0001 2019-10-10 u0001 2019-10-11 u0001 2019-10-12 u0001 2019-10-14 u0001 2019-10-1 ...

  7. Mac下新安装的MySQL无法登陆root用户解决方法

    Mac下新安装的MySQL无法登陆root用户解决方法 参考文章: (1)Mac下新安装的MySQL无法登陆root用户解决方法 (2)https://www.cnblogs.com/maxinlia ...

  8. mac mysql root不能登陆_Mac下新安装的MySQL无法登陆root用户解决方法

    一 设置MySQL命令行搜索路径 0.苹果->系统偏好设置->最下边点mysql 在弹出页面中 启动mysql服务 1.打开终端,输入: sudo vi ~/.bash_profile 如 ...

  9. CAJ未授权用户在此计算机,笔记本提示未授予用户在此计算机上的请求登陆类型怎么办...

    在笔记本电脑中,不少用户都遇到这样的问题,系统重装后,在其他电脑上用GUEST账户也无法访问自己共享的文件夹了,系统提示未授予用户在此计算机上的请求登陆类型,而且系统中的GUEST账户是启用状态的.那 ...

最新文章

  1. 深入理解 C 指针阅读笔记 -- 第三章
  2. Python中必须知道的知识点:上下文管理器
  3. delete 字符数组 []_前端基础扫盲系列 长达8000字的数组总结
  4. .NET Core 服务在 ARM64 服务器中的部署
  5. java王大拿谢大脚_《乡村爱情1》:“王大拿”赵本山有3大亮点,追谢大脚根本不算啥...
  6. python对浏览器的常用操作_Selenium元素的常用操作方法分析
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的生活质量衡量系统
  8. mycat核心配置详解(schema.xml配置)
  9. Spark 训练机器学习模型莫名报错(java.lang.stackoverflow)
  10. Thrift搭建分布式微服务(四)
  11. nssm在服务器上的使用超详细说明
  12. 复合索引列顺序对性能的影响
  13. WCF服务可靠性传输配置与编程开发(转)
  14. C语言复习 -- 知识点总结(全)
  15. jszip 解压压缩包_通过javascript在网页端解压zip文件并查看压缩包内容
  16. 借问钱程何处有,牧童劝我学Python——2019python职位分析
  17. python去中心化_EOS区块链dApp去中心化应用汇总
  18. 用谷歌按钮登录_使用非常简单的设置即可登录Google的按钮
  19. 大神有没有?看看ajax post 数据到WCF为啥总报405或跨域?
  20. android气泡组件,Android 聊天气泡

热门文章

  1. 1116: [POI2008]CLO
  2. C/C++ bind函数应用详解
  3. Revit二次开发——向量判断平行与垂直
  4. Lync Server 2013 Preview 安装体验(一)部署准备
  5. MySQL : Access denied for user ''@'localhost' to database 'mysql'问题看点。
  6. Django如何实现点赞、收藏以及浏览量增减
  7. 景安网络:根植中原厚土发力云计算巅峰
  8. 由微信2019公开课学到的
  9. Win10自定义短语
  10. 【Bug集锦】shader显示效果一会儿是正常的一会儿是暗淡的(无光照)