SQL实现次日、三日及七日用户留存率的计算

2023-11-20

本篇博客学习如何用SQL来实现次日、三日及七日留存率的计算。

假设有一个表 role_login_back,有字段:event_time表示登陆日期时间和device_id表示设备ID。

event_time device_id
2020-01-01 12:40:44 cB789hj888888

现在要计算用户的次日留存率、三日留存率、七日留存率等。在计算之前,我们先来弄清楚这些留存的定义。

  • 次日留存:即当日登录后,第二天也登录的用户,称为次日留存用户。
  • 三日留存:即当日登录后,第三天也登录的用户,称为三日留存用户。
  • 七日留存:即当日登录后,第七天也登录的用户,称为七日留存用户。

代码如下:

① 将device_id分组,每个device_id按照时间进行排序。

select 
	distinct date(event_time) as log_day, # 只关心日期,不关注具体的时间。
	device_id as user_id_d0
from role_login_back
group by device_id
order by log_day; a

② 取出次日、第三天以及第7天登录的设备id。

select 
	distinct log_day,
	a.user_id_d0,
	b.device_id as user_id_d1,
	c.device_id as user_id_d3,
	d.device_id as user_id_d7
from a
left join role_login_back b 
on datediff(date(b.event_time),a.log_day) = 1 
and a.user_id_d0 = b.device_id
left join role_login_back c 
on datediff(date(c.event_time), a.log_day) = 2
and a.user_id_d0 = c.device_id
left join role_login_back d
on datediff(date(d.event_time), a.log_day) = 6
and a.user_id_d0 = d.device_id; temp

③ 计算次日、三日及七日留存率。

select
	log_day '日期',
	count(user_id_d0) '新增数量',
	count(user_id_d1) / count(user_id_d0) '次日留存率',
	count(user_id_d3) / count(user_id_d0) '3日留存率',
	count(user_id_d7) / count(user_id_d0) '7日留存率',
from temp
group by log_day;

综合代码:

select
	log_day '日期',
	count(user_id_d0) '新增数量',
	count(user_id_d1) / count(user_id_d0) '次日留存率',
	count(user_id_d3) / count(user_id_d0) '3日留存率',
	count(user_id_d7) / count(user_id_d0) '7日留存率',
from (
	select 
		distinct log_day,
		a.user_id_d0,
		b.device_id as user_id_d1,
		c.device_id as user_id_d3,
		d.device_id as user_id_d7
	from 
		(select 
			distinct date(event_time) as log_day, # 只关心日期,不关注具体的时间。
			device_id as user_id_d0
		from role_login_back
		group by device_id
		order by log_day) a
	left join role_login_back b 
	on datediff(date(b.event_time),a.log_day) = 1 
	and a.user_id_d0 = b.device_id
	left join role_login_back c 
	on datediff(date(c.event_time), a.log_day) = 2
	and a.user_id_d0 = c.device_id
	left join role_login_back d
	on datediff(date(d.event_time), a.log_day) = 6
	and a.user_id_d0 = d.device_id 
	)
group by log_day;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL实现次日、三日及七日用户留存率的计算 的相关文章

  • 为什么我在 MySQL 中设置更大的 INT 数据类型长度时没有收到错误消息?

    我对 MySql 中的数据类型长度有点困惑 我阅读了参考手册http dev mysql com doc refman 5 0 en data types html http dev mysql com doc refman 5 0 en
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 以编程方式插入行(父行和子行)

    我正在使用 Spring 和 JDBCTemplate 该场景是 CUSTOMER 表和 ORDERS 表的父子关系 我想做一个插入 例如 1 个客户和 5 个订单 但我不确定如何以编程方式在 CUSTOMER 表中插入一行 如何获取 Or
  • 当从属文本框中没有输入文本时,如何让 gridview 显示所有表格行?

    下面的代码可以正常工作 并根据文本框中输入的文本过滤我的网格视图 当我的文本框中没有输入任何文本时 我没有得到任何结果 并且无法理解为什么 我的问题 如何让gridview显示all当文本框中没有输入文本时表行 MSSQL Search n
  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • 选择多列 按一列分组 按计数排序

    我在Oracle中有以下数据集 c1 c2 c3 1A2 cat black 1G2 dog red B11 frog green 1G2 girl red 试图得到以下结果 基本上我首先尝试获取具有重复 c1 的行 c1 c2 c3 1G
  • MySQL集群启动失败

    这不是我第一次创建ndbcluster 但我没有收到这样的问题 我正在关注本手册 https hub docker com r mysql mysql cluster by mysql团队 我正在使用回显的默认配置在此 GitHub 存储库
  • H2 SQL 日期比较

    在 H2 数据库中 如何在 TIMESTAMP 类型的列上运行查询 SELECT FROM RECORDS WHERE TRAN DATE lt 2012 07 24 Try 2012 07 24
  • 更好地理解 SQL Server 中的架构

    就像标题一样 我还是一个SQLServer菜鸟 当我创建表 Mytable 时 数据库中显示 dbo Mytable 但有人能让我更好地理解模式吗 另外 在 Server 2008 TSQL 一书中 Itzik 说 在你的数据库中 表属于模
  • SQL Server:为什么 ISO-8601 格式的日期依赖于语言?

    我需要一些帮助来理解 SQL Server 中的日期格式处理 如果您尝试以下操作 它将返回正确的结果 SET LANGUAGE English SELECT CAST 2013 08 15 AS DATETIME 2013 08 15 00
  • SQL 使用另一列的键和最大值设置列

    我需要根据同一 ID 的 duration 列的最大值更新 max register 列 将值设置为 1 其他值设置为 0 初始表 Id duration max register 1 0 0 1 7 0 1 3 0 2 10 0 2 5
  • 在MySQL中生成随机字符串

    我正在尝试使用函数在 phpmyadmin 中获取随机字符串 我有以下代码 CREATE FUNCTION randomPassword RETURNS varchar 128 BEGIN SET chars ABCDEFGHIJKLMNO
  • 日期时间与时间戳字段

    我是 MySQL 数据库的新手 您是否建议在表创建中使用日期时间或时间戳字段以及原因 我正在使用 MySQL 5 7 和 innodb 引擎 Thanks 我会用TIMESTAMP对于任何需要自动管理的事情 因为它支持诸如ON UPDATE
  • AWS RDS MySql - 如何在设置“公开可用”后允许访问

    刚刚使用默认设置和用户 密码创建了新的 AWS RDS MySql 实例 我也将其设置为publicly available并在此过程中创建新的 VPC 目前无法从我的笔记本电脑连接到此 RDS mysql h endpoint u myu
  • 时间序列数据的自连接

    我需要一些帮助来完成我认为应该是相当简单的自连接查询 只需要将两条记录中匹配的开始时间和结束时间合并为一条记录 假设我的表中有以下内容 Time Event 08 00 Start 09 00 Stop 10 30 Start 10 45
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 获取mysql中逗号分隔行中不同值的计数

    一个表 Jobs 有 2 列 JobId 城市 当我们保存工作时 工作位置可能是多个城市 如下所示 JobId City 1 New York 2 New York Ohio Virginia 3 New York Virginia 我如何

随机推荐

  • 代码生成二维码

    使用java生成二维码 前言 使用步骤 xml 生成二维码 二维码转url 总结 前言 Zxing Zxing 是一个开源的 Java 二维码扫描和生成库 由美国 Google 公司的一位开发者 Sean Owen 在 2006 年开发并发
  • 自动化测试——接口测试

    一 接口分类 1 内部接口 测试被测系统各个子模块之前的接口 或者测试被测系统提供给内部用户系统使用的接口 2 外部接口 被测系统调用外部的接口 系统对外提供的接口 接口测试重点 检查结论参数传递的正确性 输出结果的正确性及对各种异常情况的
  • 普通游戏显卡和专业图形显卡的区别

    搞图形设计的朋友应该都知道 显卡分为普通游戏显卡和专业图形显卡 有些人会错误的认为图形显卡比游戏显卡性能强 或者游戏显卡比图形显卡性能强 其实这两种显卡是没有可比性的 因为它们在功能设计上是有一定的区别 这里首先可以告诉大家游戏显卡和图形显
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • 机器视觉毕业设计 深度学习人脸识别系统设计与实现 - opencv python

    文章目录 0 前言 1 机器学习 人脸识别过程 人脸检测 人脸对其 人脸特征向量化 人脸识别 2 深度学习 人脸识别过程 人脸检测 人脸识别 Metric Larning 3 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升
  • 时序预测

    时序预测 Matlab实现SO CNN BiGRU蛇群算法优化卷积双向门控循环单元时间序列预测 目录 时序预测 Matlab实现SO CNN BiGRU蛇群算法优化卷积双向门控循环单元时间序列预测 预测效果 基本介绍 程序设计 参考资料 预
  • Google Java编程风格指南

    http hawstein com posts google java style html 目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义
  • .inl文件

    背景 最近工作涉及到thrust库 看了半天也没找到一个头文件的函数定义 本来以为会有一个cpp源文件对应h头文件 后来问头文件的末尾发现了一个include lt inl gt 所以有必要了解这个文件组织形式 引用 作者 Return H
  • JSX、JSX的介绍、JSX特点、JSX的语法、XML基本语法

    1 JSX的介绍 什么是JSX JSX javascript xml就是Javascript和XML结合的一种格式 是 JavaScript 的语法扩展 只要你把HTML代码写在JS里 那就是JSX 在实际开发中 JSX 在产品 打包阶段
  • 自动驾驶路径规划与控制:讨论自动驾驶车辆的路径规划算法,如A*、Dijkstra等,以及控制策略,如PID控制等

    摘要 随着自动驾驶技术的快速发展 路径规划和控制算法在自动驾驶系统中扮演了越来越重要的角色 本文将探讨自动驾驶车辆的路径规划算法 如A 和Dijkstra 以及控制策略 如PID控制 同时 我们将引用相关论文 以便于深入了解这些技术的原理和
  • 中国互联网技术联盟推出国内首个“互联网+”资讯门户

    ITA1024中国互联网技术联盟7月正式推出专注 互联网 的资讯门户网站http abc ita1024 com 这也是国内首个专注于帮助中国企业有效落地 互联网 的服务平台 如果你是负责企业 互联网 转型战略的CEO CIO CFO CM
  • C++ MFC 导出ListControl数据到Excel

    一 导入对应的类 二 开启线程 void CLDITxtQueryDlg OnBnClickedBnExportToXLS TODO 在此添加控件通知处理程序代码 if ui ListCtrlDataResult GetItemCount
  • 并发编程 (6)一不小心就死锁了,怎么办?

    在上一篇文章中 我们用 Account class 作为互斥锁 来解决银行业务里面的转账问题 虽然这个方案不存在并发问题 但是所有账户的转账操作都是串行的 例如账户 A 转账户 B 账户 C 转账户 D 这两个转账操作现实世界里是可以并行的
  • 机器学习之LDA算法

    目录 LDA算法 LDA目标 LDA原理推导 LDA除法模型 LDA减法模型 LDA除法正则模型 LDA减法正则模型 证明 St Sw Sb LDA算法流程 LDA优点 LDA缺点 基于LDA的人脸识别 LDA算法 线性判别分析 linea
  • 2022Java面试题大全(整理版)面试题附答案详解,最全面详细

    目录 JAVA八股文 Java基础 String 和StringBuffer和 StringBuilder的区别 sleep 区间wait 区间有什么区别 Object 中有哪些方法 其中clone 怎么实现一个对象的克隆 Java如何实现
  • 安装MySQL出现Job for mysqld.service failed because the control process exited with error code

    这是因为无法再次初始化 解决办法 rm rf var lib mysql 然后重启service
  • 解决使用EasyPoi导入读取日期格式列获取值为null

    最近在做导入的时候发现 使用EasyPoi读取的日期值为null 这是我的Excel数据 如图 只是设置了列格式 我这里使用的是注解bean的方式解析读取 Map自由导入也尝试过 得到的结果都是null bean定义如下 Data Buil
  • 导出离散傅里叶变换(DFT)的两种方法

    1 原理部分 在这里首先确定DFT的对象为一个有限长的离散非周期序列 这主要因为计算机处理的都是有限长的离散序列 如果你要处理的序列本身不是离散非周期的序列 可以通过截取或者离散化等方法获得所需的有限长的离散非周期序列 对于有限长的离散非周
  • 第三周作业 token防爆破 (基于pikachu平台)burp token的暴力破解

    一 什么是token 简单的说token是由服务端生成的一串字符串 作为客户端向服务端请求的一个标识 在前端使用用户名 密码向服务端发送请求认证 服务端认证成功 那么在服务端会返回token给前端 前端在每次请求时会带上服务端发来的toke
  • SQL实现次日、三日及七日用户留存率的计算

    本篇博客学习如何用SQL来实现次日 三日及七日留存率的计算 假设有一个表 role login back 有字段 event time表示登陆日期时间和device id表示设备ID event time device id 2020 01