sql高频面试题-连续完成两个指定动作的用户统计

news2024/11/24 15:45:50

 
 

用户行为分析

业务背景

某购物APP最近上线了一个新功能,用户签到后可以跳转到大转盘抽奖,抽奖获得的奖金可以抵消购物的费用,以此来培养用户使用app的习惯。

数据表介绍

现有一张用户行为表action_log,主要字段如下,记录了用户在app上的所有行为日志,即何人userid在何时action_time进行了什么操作action_name。


select 10001 userid ,'2023-08-01 00:32:33'  action_time , 'sign' action_name 
into #action_log
union all   
select 10001 userid ,'2023-08-01 00:32:38'  action_time , 'lottery' action_name 
union all   
select 10001 userid ,'2023-08-01 00:32:10'  action_time , 'login' action_name 
union all  
select 10001 userid ,'2023-08-01 01:20:12'  action_time , 'logout' action_name 
union all  
select 10002 userid ,'2023-08-01 15:32:33'  action_time , 'sign' action_name 
union all 
select 10002 userid ,'2023-08-01 15:32:38'  action_time , 'lottery' action_name 
union all   
select 10002 userid ,'2023-08-01 15:32:10'  action_time , 'login' action_name 
union all  
select 10002 userid ,'2023-08-01 15:20:12'  action_time , 'logout' action_name 
union all 
select 10002 userid ,'2023-08-01 15:32:35'  action_time , 'gift' action_name 
  
 select * from  #action_log

需求:

统计每天签到之后并进行抽奖的用户数,注意签到和抽奖行为必须相邻(签到和抽奖行为对应的event_id分别为'sign','lottery')。

思路:

统计用户数时添加了限制:签到之后要大转盘抽奖,两个行为一前一后必须相邻才可以。这个时候我们可以用窗口函数的位移函数lead() over()实现,lead可以取当前记录的下一条记录,如果我们对每个用户userid分组,按照行为时间action_time升序排列,就可以得到一个用户的连续的行为记录,再用lead() 就可以得到下一条记录,从而在当前记录中得到下一条记录,对两个连续行为进行筛选,就可以计算满足这个条件的用户数。

代码:
 select  convert(varchar(10),action_time,120) day, count(distinct userid)  users
 from (
      select *,lead (action_name,1) over(partition by userid order by action_time ) next_aciton  
      from #action_log
)t
 where action_name ='sign' and next_aciton = 'lottery' 
 group by convert(varchar(10),action_time,120)

细节点注意:这种查询方式可查询出两个连续动作跨天的用户,用户被统计在了第一个动作(即签到 “sign”)所属的日期中

lead() over 必须在sqlserver 2012版及以上执行

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

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

相关文章

7天获英国名校邀请函|CSC青骨获批成功案例补记

Q老师要求2周内拿到邀请函且必须是世界排名前200名的高校。我们在第7天就获得了世界百强名校-英国兰卡斯特大学的邀请函,导师的研究方向完全契合,提前实现了Q老师的委托目标,使其顺利获批CSC青骨项目。特别提示:青骨项目国内派出院…

5. 服务发现

当主机较少时,在抓取配置中手动列出它们的IP地址和端口是常见的做法,但不适用于较大规模的集群。尤其不适用使用容器和基于云的实例的动态集群,这些实例经常会变化、创建或销毁的情况。 Prometheus通过使用服务发现解决了这个问题&#xff1…

测试人员该怎样写软件缺陷报告?

软件测试过程中,每个公司都制订了软件的缺陷处理流程,每个公司的软件缺陷处理流程不尽相同,但是它们遵循的最基本流程是一样的,都要经过提交、分配、确认、处理、复测、关闭等环节,如图1所示。 缺陷处理流程 关于图1所…

Linux:shell脚本:基础使用(3)

for循环语句 语句格式 for for变量 in 取值列表(可以是变量或者自己定义) do 循环内容 done 工作方式就是通过取值列表去判断循环的次数,每次循环的同时把列表一行的值赋予到for变量。取值方式如果是数字,那就通过数字去…

MySQL 索引 详解

一、索引概述 索引是帮助 MySQL 高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上…

设计师常用的6款UI设计工具

在选择UI设计工具时,设计师需要关注UI设计工具的功能。市场上有很多设计UI的工具。既然UI设计工具这么多,设计师应该如何选择UI设计工具?本文盘点了6种流行的UI设计工具,快来看看。 1.即时设计 即时设计是一款免费的在线 UI 设计…

利用ChatGPT绘制思维导图——以新能源汽车竞品分析报告为例

随着人们对环境保护的日益关注和传统燃油汽车的限制,全球范围内对新能源汽车的需求不断增长。新能源汽车市场的激烈竞争使得了解各个竞品的特点和优劣成为关键。然而,针对这一领域的详尽竞品分析却常常需要大量时间和精力。 在此背景下,人工智…

行业追踪,2023-08-10

自动复盘 2023-08-10 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

maven Jar包反向install到本地仓库

maven Jar包反向install到本地仓库 需求实现 需求 项目打包时报错,缺少一个jar包。 但是在maven仓库都找不到此jar包,其他人提供了这个jar包。 需要把这个jar包install到本地仓库,使项目能正常打包运行。 实现 使用git bash命令执行以下脚…

qt5.15.2 使用mysql8.1

报错&#xff1a; QMYSQL driver not loaded 报错&#xff1a;无 QMYSQL 使用 QStringList drivers QSqlDatabase::drivers(); //获取现在可用的数据库驱动 foreach(QString driver, drivers) qDebug() << driver; “QSQLITE” “QMARIADB” “QMYSQL” “QMYSQL3” “…

UML-状态图

目录 状态图 状态图的图符 状态机 状态 ​转换 电话机状态图 活动图和状态图区别&#xff1a; 状态图 状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为&#xff0c;显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态…

基于金融行业的软件测试分析

随着银行业务不断增加&#xff0c;业务模式不断复杂化&#xff0c;对我们的银行软件也要求越来越高&#xff0c;产出高质量的产品也非常重要&#xff0c;下面对银行软件测试进行分析总结。 银行软件集中度高&#xff0c;规模庞大&#xff0c;往往是以系统群的方式存在&#xff…

“去没有天花板的地方” | 小红书用户情绪数据

最近&#xff0c;话题#人就要待在没有天花板的地方#社媒讨论度居高不下&#xff0c;小红书相关话题近90天互动量超百万。 生活的无常之外&#xff0c;越来越多人渴望与大自然更深层次的链接&#xff0c;以此寻找情绪的不同出口。或许&#xff0c;剖析这些情绪的生成机理&#x…

全球飞机电磁阀总体规模分析

电磁阀是一种液压管路的电磁装置&#xff0c;通过使用电流产生磁场&#xff0c;从而驱动螺线管&#xff0c;控制阀中流体的流动。电磁阀作为流体控制自动化系统的执行器之一&#xff0c;有着结构紧凑、尺寸小、重量轻、密封良好、维修简便和可靠性高、节能降耗的特点&#xff0…

cpolar内网穿透的安装

群晖6.X安装cpolar内网穿透 文章目录 群晖6.X安装cpolar内网穿透前言1. 下载cpolar的群晖套件1.1 打开群晖套件中心1.2 选择“手动安装”1.3 选择下载cpolar套件位置 2. 打开cpolar的Web-UI界面3. 注册会员 前言 随着硬件设备和软件技术的发展&#xff0c;以及数据量的发福暴涨…

[低端局][cx32L003] 移植U8G2

文章目录 一、简介&#xff08;1&#xff09;U8g2&#xff08;2&#xff09;U8x8 二、配置要求三、移植步骤&#xff08;1&#xff09;文件准备和添加&#xff08;2&#xff09;实现回调接口(I2C的读写函数)①软件I2C②硬件I2C &#xff08;3&#xff09;功能裁剪① u8g2_d_set…

数据结构链表——单链表

数据结构链表——单链表 概念及结构单链表的实现结构体类型的定义和头文件接口函数打印链表创建新节点尾插头插尾删头删查找任意插入指定位置之前插入指定位置之后插入 指定位置删除指定位置后删除单链表空间的销毁 概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续…

PHP 使用ThinkPHP实现电子邮件发送示例

文章目录 首先我们需要设置我们的邮箱客户端授权&#xff0c;获取到授权码找到我们的邮箱设置去账号中找到这一堆服务&#xff0c;找到后开启smtp服务开启服务后管理服务 接下来需要去下载相应的第三方类库(我这里使用的是PHPMailer)在thinkPHP中封装一下邮件服务类实际调用效果…

Java 常用编辑器 IntelliJ IDEA

文章目录 IDEA 概述IDEA 下载和安装IDEA 中的第一个代码IDEA 的项目和模块操作&#xff08;一&#xff09;类的操作&#xff08;二&#xff09;模块的操作&#xff08;三&#xff09;项目的操作 IDEA 概述 IntelliJ IDEA是一款由JetBrains开发的集成开发环境&#xff08;IDE&am…

Android T 窗口层级其二 —— 层级结构树的构建(更新中)

如何通过dump中的内容找到对应的代码&#xff1f; 我们dump窗口层级发现会有很多信息&#xff0c;adb shell dumpsys activity containers 这里我们以其中的DefaultTaskDisplayArea为例 在源码的framework目录下查找该字符串&#xff0c;找到对应的代码就可以通过打印堆栈或者…