1.每日SQL----2024/11/7

news2024/11/9 2:57:40

题目:

计算用户次日留存率,即用户第二天继续登录的概率

表:

iddevice_iddate
121382024-05-03
232142024-05-09
332142024-06-15
465432024-08-13
523152024-08-13
623152024-08-14
723152024-08-15
832142024-05-09
932142024-08-15
1065432024-08-13
1123152024-08-13
1223152024-08-14
1323152024-08-15
1432142024-08-16
1532142024-08-18
1665432024-08-13
  • id 用户唯一标识符
  • device_id 用户登录使用的设备标识符
  • date 用户登录日期

你应该返回的结果:

avg_ret
0.3000

请认真思考后作答


解题思路

  1. 去重数据:首先,我们需要从原始数据中选择每个设备ID (device_id) 和对应的登录日期 (date),并去除重复项。这一步是为了确保每个设备在每个日期只有一条记录。

  2. 查找下一个登录日期:使用窗口函数 LEAD(),我们可以找到每个设备的下一个登录日期。LEAD() 函数会返回当前行之后的指定偏移量的行的值。这里我们将 LEAD() 应用在 date 列上,按 device_id 分区,并按 date 排序。

  3. 计算日期差:对于每一对连续的登录日期(当前日期 date1 和下一个日期 date2),我们使用 DATEDIFF() 函数计算它们之间的天数差。如果天数差为1,则表示用户在次日登录了。

  4. 计算次日留存率:使用 IF 语句,如果 DATEDIFF(date2, date1) = 1,则返回1,否则返回0。然后,对所有的这些0和1取平均值,得到次日留存率。

代码如下

select avg(if(datediff(date2, date1)=1, 1, 0)) as avg_ret
from (
    select
        distinct device_id,
        date as date1,
        lead(date) over (partition by device_id order by date) as date2
    from (
        select distinct device_id, date
        from user_detail
    ) as uniq_id_date
) as id_last_next_date

运行结果如下

在这里插入图片描述

本题的重点是lead开窗函数的使用,你学会了吗?下期见~

后附建表语句

drop table if  exists `user_detail`;
CREATE TABLE `user_detail` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`date` date NOT NULL
);

INSERT INTO user_detail VALUES(1,2138,'2024-05-03');
INSERT INTO user_detail VALUES(2,3214,'2024-05-09');
INSERT INTO user_detail VALUES(3,3214,'2024-06-15');
INSERT INTO user_detail VALUES(4,6543,'2024-08-13');
INSERT INTO user_detail VALUES(5,2315,'2024-08-13');
INSERT INTO user_detail VALUES(6,2315,'2024-08-14');
INSERT INTO user_detail VALUES(7,2315,'2024-08-15');
INSERT INTO user_detail VALUES(8,3214,'2024-05-09');
INSERT INTO user_detail VALUES(9,3214,'2024-08-15');
INSERT INTO user_detail VALUES(10,6543,'2024-08-13');
INSERT INTO user_detail VALUES(11,2315,'2024-08-13');
INSERT INTO user_detail VALUES(12,2315,'2024-08-14');
INSERT INTO user_detail VALUES(13,2315,'2024-08-15');
INSERT INTO user_detail VALUES(14,3214,'2024-08-16');
INSERT INTO user_detail VALUES(15,3214,'2024-08-18');
INSERT INTO user_detail VALUES(16,6543,'2024-08-13');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安利一款开源企业级的报表系统SpringReport

SpringReport是一款企业级的报表系统,支持在线设计报表,并绑定动态数据源,无需写代码即可快速生成想要的报表,可以支持excel报表和word报表两种格式,同时还可以支持excel多人协同编辑,后续考虑实现大屏设计…

使用ookii-dialogs-wpf在WPF选择文件夹时能输入路径

在进行WPF开发时,System.Windows.Forms.FolderBrowserDialog的选择文件夹功能不支持输入路径: 希望能够获得下图所示的选择文件夹功能: 于是,通过NuGet中安装Ookii.Dialogs.Wpf包,并创建一个简单的工具类: …

RHCE---搭建lnmp云存储

一、恢复快照后,检查安全性(查看selinux 以及防火墙) 二、搭建LNMP环境 [rootserver ~]# yum -y install nginx mariadb-server php*三、上传软件 1、将nextcloud-25.0.1.zip压缩包传递到根目录下 2、解压缩nextcloud-25.0.1.zip &#xf…

Day95 Docker

Docker的使用 1、Docker是什么 docker是一个用来管理镜像的容器 容器(container):可以装东西 镜像( image ):所谓的镜像,你可以认为就是一个虚拟机 虚拟机:用软件代理硬件来模拟整个计算机的这样一套软件就成为 虚拟机 镜像说白了…

从分析Vue实例生命周期开始,剖析Vue页面跳转背后执行过程

文章目录 1.概要2.Vue实例生命周期3.生命周期函数解释4.存在父子组件情况页面执行过程5. 分析路由跳转页面执行过程6.扩展补充7.小结 1.概要 本文旨在分析Vue页面进行路由切换时,Vue背后的运行过程,旨在让大家更加清晰地明白Vue页面运行过程中钩子方法的…

超分辨重建——复现SwinIR网络推理测试(详细图文教程)

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《图像增强》 &a…

【青牛科技】应用方案 | D75xx-150mA三端稳压器

概 述 D75XX系列是一套三端高电流低压稳压器。它们可以提供 150mA 的输出电流和允许输入电压高达30V。它们有几个固定的输出电压范围为3.0 V至5.0 V。CMOS 技术确保低电压降和低静态电流。 虽然这些设备主要设计为固定电压调节器,但它们可以与外部元件一起使用&…

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …

WPF 打包

打包为单个exe文件直接运行 - - -版本.NET8 新建WPF项目 右键 - 发布 选择发布文件夹 选择发布文件夹 选择发布文件夹 配置 配置,保存 发布 WPF 打包为exe安装程序 示例 实现思路 引导项目中嵌入其它项目可运行目录的zip引导项目中解压zip文件到指定文件夹是…

三维测量与建模笔记 - 3.3 张正友标定法

上图中,提到了世界坐标系在张正友标定法中的设计,可以理解为将世界坐标系的原点放到了棋盘格左上角点的位置,并且棋盘格平面上所有点的Z为0,将Z规定为0的话,可以简化掉一个维度(列向量r3)。去掉…

【解决办法】无法使用右键“通过VSCode打开文件夹”

个人博客:苏三有春的博客 前言 作者的编程环境为VScode,工作时常使用VScode打开整个工程文件夹。如果先打开VScode再从VScode中选择文件夹打开效率太慢,作者一般使用的方式是右键文件夹,直接选择"通过code打开文件夹"…

推荐一款ETCD桌面客户端——Etcd Workbench

Etcd Workbench 我相信很多人在开始管理ETCD的时候都去搜了Etcd客户端工具,然后找到了官方的Etcd Manager,但用完之后发现它并不好用,还不支持多连接和代码格式化,并且已经好几年不更新了,于是市面上就有了好多其他客…

Docker配置及简单应用

谈论/理解 Docker 的常用核心部分,以下皆在 Ubuntu 操作系统下进行 1 国内源安装 Docker-ce 1.1 配置 Linux 内核流量转发 因为docker和宿主机的端口映射,本质是内核的流量转发功能,所以要对其进行配置 1.1.1 未配置流量转发 如果没有配置流…

(十二)JavaWeb后端开发——MySQL数据库

目录 1.数据库概述 2.MyQSL 3.数据库设计 DDL 4.MySQL常见数据类型 5.DML 1.数据库概述 数据库:DataBase(DB),是存储和管理数据的仓库 数据库管理系统:DataBase ManagementSystem(DBMS),操纵和管理数据库的大型软件 SQL&a…

fastadmin后台列表根据所选中的行统计指定字段|fastadmin点击checkbox或反选统计某个字段的值

当选中对应行时,统计选中行的用户注册数和用户点击数。 此项功能需要有 点击全选触发事件、点击反选触发事件、勾选某一行触发事件、反选某一行触发事件,用到fastadmin自带的表格事件功能,参考:https://doc.fastadmin.net/doc/19…

stm32使用串口DMA实现数据的收发

前言 DMA的作用就是帮助CPU来传输数据,从而使CPU去完成更重要的任务,不浪费CPU的时间。 一、配置stm32cubeMX 这两个全添加上。参数配置一般默认即可 代码部分 只需要把上期文章里的HAL_UART_Transmit_IT(&huart2,DATE,2); 全都改为HAL_UART_Tra…

轨迹规划中优化预测:学习多个初始解的优化器

Abstract 在许多应用中,如机器人控制、自动驾驶和投资组合管理,需要在严格的运行时间限制下连续地解决相似的优化问题。在这种情况下,局部优化方法的性能对初始解的质量非常敏感:不良的初始化可能会导致收敛缓慢或得到次优解。为…

05 SQL炼金术:深入探索与实战优化

文章目录 SQL炼金术:深入探索与实战优化一、SQL解析与执行计划1.1 获取执行计划1.2 解读执行计划 二、统计信息与执行上下文2.1 收集统计信息2.2 执行上下文 三、SQL优化工具与实战3.1 SQL Profile3.2 Hint3.3 Plan Baselines3.4 实战优化示例 SQL炼金术&#xff1a…

JS封装随机生成一个颜色值工具函数

本文给大家带来的是封装的一个随机生成一个颜色值的工具函数。案例中提供了4个不同的调用函数,但实现的功能本质上都是一样的,开箱即用,随调随用。 //方法一 function getRandomColor() { //随机颜色return #${Math.floor(Math.random() * …

CESS 正式加入政府区块链协会 (GBA) ,出席 Blockchain Infrastructure 大会

北京时间 11 月 6 日,特朗普赢得 2024 年美国总统大选。与此同时,我们很高兴地宣布,CESS 已正式加入政府区块链协会 (GBA)。GBA 是一个全球性协会,致力于将区块链专业人士汇聚在一起,共同推动区块链技术在政府、金融和…