MySQL 计算连续登录天数


Posted in MySQL onMay 11, 2022

MySQL计算连续登录天数


建表、insert数据

create table tmp_login (
  user_id int(11) ,
  login_date datetime
);

insert into tmp_login values(2,'2020-05-29 11:12:12');
insert into tmp_login values(2,'2020-05-29 15:12:12');
insert into tmp_login values(2,'2020-05-30 11:12:12');
insert into tmp_login values(2,'2020-05-31 11:12:12');
insert into tmp_login values(2,'2020-06-01 11:12:12');
insert into tmp_login values(2,'2020-06-02 11:12:12');
insert into tmp_login values(2,'2020-06-03 11:12:12');
insert into tmp_login values(2,'2020-06-04 11:12:12');
insert into tmp_login values(2,'2020-06-05 11:12:12');
insert into tmp_login values(2,'2020-06-06 11:12:12');
insert into tmp_login values(2,'2020-06-07 11:12:12');
insert into tmp_login values(7,'2020-06-01 11:12:12');
insert into tmp_login values(7,'2020-06-02 11:12:12');
insert into tmp_login values(7,'2020-06-03 11:12:12');
insert into tmp_login values(7,'2020-06-05 11:12:12');
insert into tmp_login values(7,'2020-06-06 11:12:12');
insert into tmp_login values(7,'2020-06-07 11:12:12');
insert into tmp_login values(7,'2020-06-08 11:12:12');

方法一 row_number()

  1. 查询所有用户的每日登录记录
select distinct user_id, date(login_date) as days 
from tmp_login;

MySQL 计算连续登录天数

  1. row_number()计算登录时间排序
select user_id, days, row_number() over(partition by user_id order by days) as rn
from (
	select distinct user_id, date(login_date) as days from tmp_login) t1;

MySQL 计算连续登录天数

  1. 用登录时间 - row_number(),如果得到的日期相同,则认为是连续登录日期
select *, date_sub(days, interval rn day) as  results
from(
	select user_id, days, row_number() over(partition by user_id order by days) as rn
	from (
		select distinct user_id, date(login_date) as days from tmp_login) t1
) t2;

MySQL 计算连续登录天数
4. 按user_id、results分组就可得出连续登录天数

select user_id, count(*) as num_days
from (
	select *, date_sub(days, interval rn day) as  results
	from(
		select user_id, days, row_number() over(partition by user_id order by days) as rn
		from (
			select distinct user_id, date(login_date) as days from tmp_login) t1
	) t2) t3
group by user_id , results;

MySQL 计算连续登录天数
直接用日期减去row_number(),不用date_sub的话,遇到登录日期跨月时会计算错误,

方法二lead() 或 lag()

这种情况适合的场景是,需要查找连续登录超过n天的用户,n为确定值
如果n为4,即计算连续登录超过4天的用户

-- lead计算连续登录
select distinct user_id 
from(
	select user_id, days, datediff(lead(days, 3, '1970-01-01') over(partition by user_id order by days), days)as results
	from (
		select distinct user_id, date(login_date) as days from tmp_login) t1) t2
where results = 3;

连续登录4天,则日期差应该为3。

MySQL 相关文章推荐
mysql字符串截取函数小结
Apr 05 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
详解MySQL主从复制及读写分离
May 07 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
Dec 06 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
解决Mysql中的innoDB幻读问题
Apr 29 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
MySQL详细讲解变量variables的用法
Jun 21 MySQL
postgresql如何找到表中重复数据的行并删除
May 08 MySQL
mysql 获取相邻数据项
May 11 #MySQL
MySQL脏读,幻读和不可重复读
May 11 #MySQL
MySql数据库 查询时间序列间隔
May 11 #MySQL
Mysql中常用的join连接方式
May 11 #MySQL
MySQL的prepare使用以及遇到的bug
May 11 #MySQL
MySQL批量更新不同表中的数据
May 11 #MySQL
mysql查找连续出现n次以上的数字
May 11 #MySQL
You might like
PHP面向对象编程快速入门
2006/10/09 PHP
PHP 遍历文件实现代码
2011/05/04 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
JS加ASP二级域名转向的代码
2007/05/17 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
python实现计算资源图标crc值的方法
2014/10/05 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
python数据封装json格式数据
2018/03/04 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
python ---lambda匿名函数介绍
2019/03/13 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
用Python开发app后端有优势吗
2020/06/29 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
最新计算机专业自荐信
2013/10/16 职场文书
情侣吵架检讨书
2014/02/05 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
二年级小学生评语
2014/04/21 职场文书
迎国庆横幅标语
2014/10/08 职场文书
新入职员工工作总结
2015/10/15 职场文书
八年级语文教学反思
2016/03/03 职场文书
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL