【数据分析面试】2.连续访问最长天数用户(SQL)

在这里插入图片描述

题目

给定一个包含事件日志的表格,找出连续访问平台时间最长的前五个用户。

注意:连续访问是指用户在连续的几天内每天至少访问一次平台。

示例:

输入:

events

ColumnType
user_idINTEGER
created_atDATETIME
urlVARCHAR

输出:

ColumnType
user_idINTEGER
streak_lengthINTEGER

答案

解题思路

我们需要找出连续访问平台时间最长的前五名用户。首先,我们要确保只从created_at列中为每个用户选择不重复的日期,以免重复日期错误地中断连续访问记录。

SELECT *
        FROM events
        GROUP BY created_at, user_id) dates

之后,第一步是找到一种计算每个用户从created_at列中的“连续访问记录”的方法。这是一个“间隔和岛屿”问题,其中数据被分成连续值的“岛屿”,由“间隔”分隔(例如1-2-3, 5-6, 9-10)。一个巧妙的技巧是利用两个等增量序列相减将为每对值产生相同的差值。

例如,[1, 2, 3, 5, 6] - [0, 1, 2, 3, 4] = [1, 1, 1, 2, 2]

通过创建一个新的列来包含此类减法的结果,我们可以对每个用户的连续访问记录进行分组和计数。对于我们的增量序列,我们可以使用每个事件的行号,可以通过窗口函数ROW_NUMBER()DENSE_RANK()获得。这两个函数之间的区别在于它们处理重复值的方式,但由于我们需要删除重复值以准确计算连续访问记录,所以它们之间没有区别。

这里用到的函数是:

  1. DATE_ADD(column, interval): 用于将指定的时间间隔添加到给定的日期或时间值。在这个例子中,created_at是要添加时间间隔的列,而INTERVAL -ROW_NUMBER() DAY表示要减去的天数。
  2. ROW_NUMBER() OVER (PARTITION BY column ORDER BY column): 用于为每个分区内的记录分配一个唯一的行号。在这个例子中,user_id是分区依据,即根据不同的用户ID进行分组;ORDER BY created_at表示按照创建时间的顺序对每个分组内的记录进行排序。
SELECT 
        DATE(DATE_ADD(created_at, INTERVAL -ROW_NUMBER() 
            OVER (PARTITION BY user_id ORDER BY created_at) DAY)) AS grp,
        user_id, 
        created_at 
    FROM (
        SELECT * 
        FROM events 
        GROUP BY created_at, user_id) dates

将事件归类为连续访问记录后,只需按连续访问记录分组,计算每个组的数量,为每个用户选择最高的连续访问记录,并对前五名用户进行排名。

易错点

  • 排除重复日期
  • 分组计算方法:

答案代码

WITH grouped AS (
    SELECT 
        DATE(DATE_ADD(created_at, INTERVAL -ROW_NUMBER() 
            OVER (PARTITION BY user_id ORDER BY created_at) DAY)) AS grp,
        user_id, 
        created_at 
    FROM (
        SELECT * 
        FROM events 
        GROUP BY created_at, user_id) dates
)
SELECT 
    user_id, streak_length 
FROM (
    SELECT user_id, COUNT(*) as streak_length
    FROM grouped
    GROUP BY user_id, grp
    ORDER BY COUNT(*) desc) c
GROUP BY user_id
LIMIT 5

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第115讲:Mycat核心配置文件各项参数的作用以及概念

文章目录 1.Mycat配置文件相关概念2.Schema配置文件3.Rule配置文件4.Server配置文件 1.Mycat配置文件相关概念 在Mycat中核心的配置文件有schema.xml和rule.xml以及server.xml三个,其中schema.xml是用来配置数据库、表、读写分离、分片节点、分片规则等信息&#x…

transformers的tokenizer总结

1.BPE(byte-pair encoding) 根据字母搭配出现的频率组成词根。 初始vocabulary:["b", "g", "h", "n", "p", "s", "u"] 假设训练数据中有10个hug,5个pug,12个pun,4…

教育数字化调研团走进锐捷,共议职业教育数字化转型新思路

为贯彻落实国家教育数字化战略行动部署和2024年全国教育工作会议精神,加快推进职业教育数字化转型与发展,梳理职业教育数字化转型的现状、问题及发展趋势,并总结展示职业教育数字化转型的好经验、好做法,培育职业教育数字化创新成果,推动数字技术与职业教育深度融合、提高数字化…

学习JavaEE的日子 Day32 线程池 上

Day32 线程池 1.引入 一个线程完成一项任务所需时间为: 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 2.为什么需要线程池(重要) 线程池技术正是关注如何缩短或调整Time1和Time3的时间,从而提高程序的性能。项目中可以把Time…

PostgreSQL关系型数据库介绍与部署

使用背景 在过去的几年中,PostgreSQL的使用量逐渐增加,而Oracle和MySQL的使用量则有所下降。这主要是由于以下几个原因:开源和免费、功能丰富、可扩展性强、安全性高、跨平台支持好、社区活跃、成熟稳定。这些因素使得PostgreSQL成为了许多开…

2014年认证杯SPSSPRO杯数学建模A题(第二阶段)轮胎的花纹全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 A题 轮胎的花纹 原题再现: 轮胎被广泛使用在多种陆地交通工具上。根据性能的需要,轮胎表面常会加工出不同形状的花纹。在设计轮胎时,往往要针对其使用环境,设计出相应的花纹形状。   第二阶段问…

深度学习语义分割篇——DeepLabV1原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

UMEDITOR – 支持WORD上传的富文本编辑器

1.下载代码 https://gitee.com/xproer/zyoffice-umeditor1x 2.引入组件 3.配置接口 效果

使用yolov9来实现人体姿态识别估计(定位图像或视频中人体的关键部位)教程+代码

yolov9人体姿态识别: 相较于之前的YOLO版本,YOLOv9可能会进一步提升处理速度和精度,特别是在姿态估计场景中,通过改进网络结构、利用更高效的特征提取器以及优化损失函数等手段来提升对复杂人体姿态变化的捕捉能力。由于YOLOv9的…

出口落叶就能获取暴利,他却要断了这条财路!学会人生算法重启装置应用!——早读(逆天打工人爬取热门微信文章解读)

重启装置的应用,你学会了吗? 引言Python 代码第一篇 人民日报 出口落叶就能获取暴利,他却要断了这条财路!第二篇 人民日报 来啦 早班车新闻要闻社会政策 结尾 昨日之覆辙 非明日之方向 泰戈尔曾言 你不能拽着自己的头发离开地面 因…

电商企业如何用数据打造破局利器:电商API数据采集实时接口助力企业618双十一各大活动

在电商行业中,618大促无疑是一场引爆商机的盛宴。 随着市场环境的变更,如何在这样高强度的活动期间脱颖而出,成为每个品牌都需要面对的重要问题。 大促期间,实时、准确的数据是核心竞争力。因为在大促中,核心渠道、核…

HBase的Python API(happybase)操作

一、Windows下安装Python库:happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行如…

PCL 彩色点云RGB转灰度并显示

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 不同要素之间的灰度差异较为明显。点云灰度值与RGB属性的关系为:

Mysql数据库:高级SQL语言详解

目录 前言 一、按关键字排序查询 1、单字段排序 1.1 按某一字段升序排序 1.2 按某一字段降序排序 1.3 结合where进行条件进行排序 2、多字段排序 2.1 按多字段升序排序 2.2 按多字段降序排序 2.3 案例操作 3、区间判断及查询不重复记录 3.1 区间判断 3.1.1 AND/OR…

【数据结构】链表习题之反转链表和删除链表中等于给定值 val 的所有节点

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉道阻且长,行则将至 前言 今天的博客是关于链表的题目,力扣上的题目之反转链表和删除链表中等于给定值 val 的所有节点 一.反转…

PMP考试难不难,通过率怎样?

PMP考试自从新考纲调整后有几次考试难度是非常高的,那段时间我也看网上好多机构通过率都不咋地,当时也是因为官方的出题难度稍高,还组织了免费的重考,也是后来逐渐开始归于平常了吧,直到现在都是我认为比较简单的选择题…

Go通道机制与应用详解

目录 一、概述二、Go通道基础通道(Channel)简介创建和初始化通道通道与协程(Goroutine)的关联nil通道的特性 三、通道类型与操作通道类型1. 无缓冲通道 (Unbuffered Channels)2. 有缓冲通道 (Buffered Channels) 通道操作1. 发送操…

杂货铺 | 使用 Github Pages 和 Hexo 搭建自己的独立博客

文章目录 📚Step1:安装Node.js和Git📚Step2:安装并初始化配置Hexo📚Step3:本地查看效果📚Step4:将博客部署到Github Pages上🐇创建项目代码库🐇配置SSH密钥&a…

VUE 支持 超大上G,多附件上传

代码:https://gitee.com/xproer/up6-vue-cli 1.引入up6组件 2.配置接口地址 接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除&…

应急 | BuleHero挖矿蠕虫最新变种分析

背 景 挖矿蠕虫病毒BuleHero擅长利用各类漏洞攻击、弱密码爆破攻击。病毒作者不断更新变种,是近期最活跃的挖矿蠕虫病毒之一。攻击者最新的BuleHero挖矿蠕虫实现入侵后,还会释放挖矿程序,使服务器的资源被消耗挖矿,极大影响正常业…