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 分组查询的优化方法
May 12 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
MySQL 隔离数据列和前缀索引的使用总结
May 14 MySQL
MySQL 十大常用字符串函数详解
Jun 30 MySQL
MySQL系列之二 多实例配置
Jul 02 MySQL
MySQL修改默认引擎和字符集详情
Sep 25 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
关于MySQL中的 like操作符详情
Nov 17 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 MySQL
关于MySQL中explain工具的使用
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
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python实现apahce网站日志分析示例
2014/04/02 Python
Python优先队列实现方法示例
2017/09/21 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
Python过滤序列元素的方法
2020/07/31 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
navabi英国:设计师大码女装
2019/06/25 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
面试求职的个人自我评价
2013/11/16 职场文书
党校学习心得体会范文
2014/09/09 职场文书
交通违章检讨书
2014/09/21 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
市场营销计划书
2019/04/24 职场文书
工作一年自我鉴定
2019/06/20 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python