最近遇到一个SQL查询需求:计算QQ连续登陆天数?
连续登陆天数不间断,如果有一天没登陆就重新计算。

数据准备

mysql> create table user_login(user_id int,login_time date);mysql> insert into user_login values
(1,'2019-06-01'),
(1,'2019-06-02'),
(1,'2019-06-03'),
(1,'2019-06-06'),
(1,'2019-06-07'),
(1,'2019-06-08'),
(1,'2019-06-11'),
(1,'2019-06-12'),
(2,'2019-06-01'),
(2,'2019-06-02'),
(2,'2019-06-04'),
(3,'2019-06-01'),
(3,'2019-06-02'),
(4,'2019-06-01'),
(5,'2019-06-01'),
(5,'2019-06-02');mysql> select * from user_login;
+---------+------------+
| user_id | login_time |
+---------+------------+
|       1 | 2019-06-01 |
|       1 | 2019-06-02 |
|       1 | 2019-06-03 |
|       1 | 2019-06-06 |
|       1 | 2019-06-07 |
|       1 | 2019-06-08 |
|       1 | 2019-06-11 |
|       1 | 2019-06-12 |
|       2 | 2019-06-01 |
|       2 | 2019-06-02 |
|       2 | 2019-06-04 |
|       3 | 2019-06-01 |
|       3 | 2019-06-02 |
|       4 | 2019-06-01 |
|       5 | 2019-06-01 |
|       5 | 2019-06-02 |
+---------+------------+

计算每位用户的连续登陆天数

-- 查询每位用户的累计登陆天数
mysql> select user_id,login_time,row_number() over(partition by user_id order by login_time) as rn  from user_login;
+---------+------------+----+
| user_id | login_time | rn |
+---------+------------+----+
|       1 | 2019-06-01 |  1 |
|       1 | 2019-06-02 |  2 |
|       1 | 2019-06-03 |  3 |
|       1 | 2019-06-06 |  4 |
|       1 | 2019-06-07 |  5 |
|       1 | 2019-06-08 |  6 |
|       1 | 2019-06-11 |  7 |
|       1 | 2019-06-12 |  8 |
|       2 | 2019-06-01 |  1 |
|       2 | 2019-06-02 |  2 |
|       2 | 2019-06-04 |  3 |
|       3 | 2019-06-01 |  1 |
|       3 | 2019-06-02 |  2 |
|       4 | 2019-06-01 |  1 |
|       5 | 2019-06-01 |  1 |
|       5 | 2019-06-02 |  2 |
+---------+------------+----+
-- 登陆时间减去登陆天数得到用户连续登陆分组
mysql> select user_id,date_sub(login_time,interval rn day) as login_group,min(login_time) as start_login_time,max(login_time) as end_login_time,count(login_time) as continuous_days
from
(
select user_id,login_time,row_number() over(partition by user_id order by login_time) as rn  from user_login
) t
group by user_id,date_sub(login_time,interval rn day);
+---------+-------------+------------------+----------------+-----------------+
| user_id | login_group | start_login_time | end_login_time | continuous_days |
+---------+-------------+------------------+----------------+-----------------+
|       1 | 2019-05-31  | 2019-06-01       | 2019-06-03     |               3 |
|       1 | 2019-06-02  | 2019-06-06       | 2019-06-08     |               3 |
|       1 | 2019-06-04  | 2019-06-11       | 2019-06-12     |               2 |
|       2 | 2019-05-31  | 2019-06-01       | 2019-06-02     |               2 |
|       2 | 2019-06-01  | 2019-06-04       | 2019-06-04     |               1 |
|       3 | 2019-05-31  | 2019-06-01       | 2019-06-02     |               2 |
|       4 | 2019-05-31  | 2019-06-01       | 2019-06-01     |               1 |
|       5 | 2019-05-31  | 2019-06-01       | 2019-06-02     |               2 |
+---------+-------------+------------------+----------------+-----------------+

SQL计算QQ连续登陆天数相关推荐

  1. SQL求用户的最大连续登陆天数

    建表插入数据 create table tmp_continous (id STRING ,time DATETIME );INSERT OVERWRITE TABLE tmp_continous S ...

  2. 求用户最大连续登陆天数mysql实现

    用户连续登陆 一.规定时间内用户最大连续登陆天数 二.user_login表字段(所有用户登陆信息) 三.分解步骤 1.where初步筛选 2.窗口函数分组排序 4.计算获得连续的字段 5.分组计算连 ...

  3. mysql 连续签到天数_获取连续登陆天数,连续签到天数 ,方法优化

    获取连续登陆天数,连续签到天数,类似这样的需求应该是一个常见的需求,那么我们有没有一套成熟的解决方案呢 ?下面我来跟大家分享一下我的故事. 在猴年马月的一天,有个用户反馈个人中心打开缓慢,需要7.8秒 ...

  4. HIVE面试题原理详解 统计用户连续交易的总额、连续登陆天数、连续登陆开始和结束时间、间隔天数

    HIVE面试题原理详解 统计用户连续交易的总额.连续登陆天数.连续登陆开始和结束时间.间隔天数 友情提示 创建数据表 添加数据 流程图 第一步分析(子表a) 第二步分析(子表b) 第三步分析(子表c) ...

  5. SQL计算连续登陆天数大于等于3天的用户

    其中给出了用户(id)和用户登陆时间(dt)两列 其中要处理把登陆时间截取到日,然后根据id和登陆时间dt进行去重,然后得到如下的数据集 再进行下面的代码 select id, sdate, edat ...

  6. SQL查询用户的最长连续登陆天数

    题目重点:连续 设表名字:user_login 第一步:使用ROW_NUMBER() 窗口函数 按UID分组,按date1升序排 -- 第一段首先根据用户分组,登陆时间排序,结果按照登陆时间升序排列 ...

  7. 超详细解析:使用SQL语句查询连续登陆7天的用户信息

    假设有如下表tb_user,现输出连续登陆7天的用户id 方法一思路: 1.因为每天用户登录次数可能不止一次,所以需要先将用户每天的登录日期去重. 2.再用row_number() over(part ...

  8. mysql 连续七天不登录_【SQL】查询连续登陆7天以上的用户

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

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

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

最新文章

  1. 开发日记-20190521 关键词 bash的几个初始化文件
  2. 5页面如何切图_如何让你的设计稿做到95%还原?
  3. python发送json数据_在Websockets上发送JSON
  4. json格式数据,将数据库中查询的结果转换为json, 然后调用接口的方式返回json(方式一)...
  5. Filter案例之登录验证
  6. Codeup——问题 H: 部分A+B (15)
  7. (三)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训
  8. gini系数 决策树_SKlearn中分类决策树的重要参数详解
  9. 实时消息传输协议(RTMP)详解
  10. HTML生成Word文档,可自定义Word文档页眉、页脚、分页。
  11. 计算学习理论PAC模型
  12. HCIP第十六天(VLAN IF接口,STP生成树协议,BPDU的配置)
  13. BitLocker驱动器
  14. 【MySQL】测试题02
  15. OS=Windows and the assembly descriptor contains a *nix-specific root-relative-reference (starting wi
  16. python绘制特洛伊小行星群
  17. K_均值聚类算法(算法设计与C代码实现)
  18. git 码云 简要使用
  19. mysqldb mysql config_python 安装MySQLdb mysql_config not fount原因
  20. 周末两天入门 PCB 设计

热门文章

  1. 无障碍服务(AccessibilityService)
  2. Lei ❤函数的初识
  3. 手机闪存速度排行_有关手机闪存类型的一些知识
  4. Python下载微信公众号文章和图片保存至本地
  5. 利用动态气泡图进行数据分析
  6. 机器学习 K近邻之KD树基本概念、绘制KD树
  7. SWT已经日薄西山(转载)
  8. NLP:Word Embedding词嵌入/word2vec词向量思想方法(一种主流的分布式表示)的简介、使用方法、案例应用之详细攻略
  9. 阿姆斯特朗数 matlab,c中阿姆斯特朗数
  10. Cisco Anyconnect 导致 wsl2 网络连接异常问题处理