服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL如何计算连续登录天数

MySQL如何计算连续登录天数

2022-10-27 14:58BurningSilence Mysql

这篇文章主要介绍了MySQL如何计算连续登录天数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

建表、insert数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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.查询所有用户的每日登录记录

?
1
2
select distinct user_id, date(login_date) as days 
from tmp_login;

MySQL如何计算连续登录天数

2.row_number()计算登录时间排序

?
1
2
3
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如何计算连续登录天数

3.用登录时间 - row_number(),如果得到的日期相同,则认为是连续登录日期

?
1
2
3
4
5
6
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分组就可得出连续登录天数

?
1
2
3
4
5
6
7
8
9
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天的用户

?
1
2
3
4
5
6
7
-- 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。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/BurningSilence/article/details/121558764

延伸 · 阅读

精彩推荐
  • MysqlMySQL的root密码忘记怎么办 修改root密码的方式

    MySQL的root密码忘记怎么办 修改root密码的方式

    MySQL数据库的root密码忘记,怎么办?修改root密码的三种方式你知道吗?下面就为大家提供详细的解决方案,需要的朋友可以参考下 ...

    iVictor4002020-06-05
  • Mysqlmysql高级学习之索引的优劣势及规则使用

    mysql高级学习之索引的优劣势及规则使用

    这篇文章主要给大家介绍了关于mysql高级学习之索引的优劣势及规则使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定...

    m0_5588624012242021-04-22
  • Mysql浅谈MySQL存储过程中declare和set定义变量的区别

    浅谈MySQL存储过程中declare和set定义变量的区别

    下面小编就为大家带来一篇浅谈MySQL存储过程中declare和set定义变量的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来...

    mysql教程网5582020-07-05
  • MysqlMySQL数据表基本操作实例详解

    MySQL数据表基本操作实例详解

    这篇文章主要介绍了MySQL数据表基本操作,结合实例形式较为详细的分析了MySQL针对数据表的基本创建、表结构查看、修改、删除等相关操作技巧,需要的朋友...

    程志伟5742019-07-07
  • Mysql有关mysql优化的一些东东整理

    有关mysql优化的一些东东整理

    有关mysql优化的一些东东,自己整理的,网上搜集的,供朋友们学习参考吧 ...

    MYSQL教程网2752019-12-17
  • Mysql详解记录MySQL中lower_case_table_names的坑

    详解记录MySQL中lower_case_table_names的坑

    这篇文章主要介绍了详解记录MySQL中lower_case_table_names的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    Houtaroy8802021-04-21
  • Mysqlmysql 5.6.21 安装与配置详细步骤

    mysql 5.6.21 安装与配置详细步骤

    这篇文章主要介绍了mysql5.6.21安装与配置的详细步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    DarrenMJ15802020-07-21
  • MysqlMySQL单表恢复的步骤

    MySQL单表恢复的步骤

    这篇文章主要介绍了MySQL单表恢复的步骤,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下...

    billy鹏的足迹10932021-01-27