热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php求两个日期的间隔天数怎么算_连续登陆人数天数问题

有时候我们会碰到连续登录人数计算的问题,比如想要求下面这两个问题的结果,该怎么求?最近连续登陆天数任意时间段内连续登陆天数最近连续登陆超过
e4b914b843b198e263daa172ee73af69.png

有时候我们会碰到连续登录人数计算的问题,比如想要求下面这两个问题的结果,该怎么求?

  1. 最近连续登陆天数
  2. 任意时间段内连续登陆天数
  3. 最近连续登陆超过x天的人数

原始数据给你:

name表示用户,date表示登陆的日期
42e22ce647d5f2fc431679c82b51617d.png

最近连续登陆天数计算实现方式:

select name,count(1) as `用户最近连续登陆天数`
from (select name,date,first_value(date) over (partition by name order by date desc) as last_login_date -- 用户最近登陆日期,DATE_ADD(first_value(date) over (partition by name order by date desc) -- 用户最近登陆日期,INTERVAL -row_number() over (partition by name order by date desc)+1 day) date_line -- 以用户最近登陆日期做降序排序,算出连续间隔1、2、3...n天的日期from aaa
) t
where date = date_line -- 限制 date = date_line 得到用户最近连续活跃日期
group by name

计算过程:

1.用户最近登陆日期;

2.以用户最近登陆日期做降序排序,算出连续间隔1、2、3...n天的日期,得到一列date_line字段;

385f87fee28eaf3588437138115a8b1b.png

3.此时,如果我们限制date=date_line,就已经得到用户最近连续活跃日期了;

cf680c101a10dea649b7984650da9ac2.png

4.使用上面的结果汇总一下,"用户最近连续登陆天数"结果就出来了(通过此结果还能计算“最近连续登陆超过x天的人数”):

7cca8a0938a23203bad6b06720ea6027.png

下面这个实现方式稍微复杂一些,但不仅是能计算“最近的连续登陆天数”,还能算“任意时间段的连续登陆天数”,扩展性更强:

实现脚本:

with t as(select *,min(last_date) over (partition by name order by date desc) as date_setfrom (select name,date,if(DATEDIFF(lag(date) over (partition by name order by date desc),date)=1,null,date) as last_datefrom aaa) t
)
select name,date_set,count(*) as `连续登陆天数`
from t
-- where date_group='2020-10-19' 最近一天登陆用户的连续登陆天数
group by name,date_set

计算过程:

1.把同一用户的连续登陆日期放到一块,派生出连续登陆日期组的最后日期,作为下游统计时用的分组:

b1f821d08eb73b3cee80a9769a466a16.png

2.以用户和“连续日期组”作分组汇总,得到用户在该组下面的连续登陆天数(通过此结果还能计算“某段时间内连续登陆超过x天的人数”)。

bbeb0077d48e6971e3c8068b7fdfc340.png



推荐阅读
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • 本文讨论了如何根据特定条件动态显示或隐藏文件上传控件中的默认文本(如“未选择文件”)。通过结合CSS和JavaScript,可以实现更灵活的用户界面。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
author-avatar
半邪书生66_516
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有