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 相关文章推荐
left join、inner join、right join的区别
Apr 05 MySQL
MySQL命令行操作时的编码问题详解
Apr 14 MySQL
MySQL 全文索引使用指南
May 25 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
解析MySQL binlog
Jun 11 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
MySQL多表查询机制
Mar 17 MySQL
MySQL创建管理RANGE分区
Apr 13 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
mysql 排序失效
May 20 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
Dec 24 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+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
简单的js分页脚本
2009/05/21 Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
vue项目实战总结篇
2018/02/11 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
Python深入学习之特殊方法与多范式
2014/08/31 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
Django中modelform组件实例用法总结
2020/02/10 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
周年庆典邀请函范文
2014/01/23 职场文书
市三好学生主要事迹
2014/01/28 职场文书
优秀员工评语
2014/02/10 职场文书
仓管员岗位责任制
2014/02/19 职场文书
五一手机促销方案
2014/03/08 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
纪律委员竞选稿
2015/11/19 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js