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

 
 

用户行为分析

业务背景

某购物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.hqwc.cn/news/61512.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch同时使用should和must

问题及解决方法 must和should组合查询,should失效。使用must嵌套查询,将should组成的bool查询包含在其中一个must查询中。 SearchRequest request new SearchRequest(); request.indices("function_log");SearchSourceBuilder sourceBuilde…

MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

文章目录 CView类的分支CEditViewCHtmlViewMainFrm.h CMainFrame 类的接口CMainView .h CListCtrl与CListView的创建原理 CTreeViewCTreeCtrl类简介CTreeCtrl类的原理以及常用功能 MFC六大关键技术视图和带分割栏的框架开发与消息路由CLeftView.cppCRightView.hCRightView.cppC…

分布式链路追踪概述

分布式链路追踪概述 文章目录 分布式链路追踪概述1.分布式链路追踪概述1.1.什么是 Tracing1.2.为什么需要Distributed Tracing 2.Google Dapper2.1.Dapper的分布式跟踪2.1.1.跟踪树和span2.1.2.Annotation2.1.3.采样率 3.OpenTracing3.1.发展历史3.2.数据模型 4.java探针技术-j…

现代C++中的从头开始深度学习【2/8】:张量编程

一、说明 初学者文本:此文本需要入门级编程背景和对机器学习的基本了解。张量是在深度学习算法中表示数据的主要方式。它们广泛用于在算法执行期间实现输入、输出、参数和内部状态。 在这个故事中,我们将学习如何使用特征张量 API 来开发我们的C算法。具…

Linux6.33 Kubernetes kubectl详解

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes kubectl详解一、陈述式资源管理方法1.基本信息查看2.项目的生命周期:创建-->发布-->更新-->回滚-->删除 二、声明式管理方法 计算机系统 5G云计算 第三章 LINUX Kubernetes kubectl详解 一、陈述…

Ubuntu系统重置 root 用户密码

文章目录 前言Ubuntu 系统重置 root 用户密码编辑 grub 菜单修改 grub 配置重设 root 用户密码前言 虚拟机用的时间久了登录系统的时候发现 root 密码忘记了, 所以在这里写一篇文章记录一下Ubuntu 系统下 root 密码忘记的解决方案,经过测试, 理论上来说这个方法适用于 Ubuntu …

『PostgreSQL』在 PostgreSQL中创建只读权限和读写权限的账号

📣读完这篇文章里你能收获到 理解在 PostgreSQL 数据库中创建账号的重要性以及如何进行账号管理掌握在 PostgreSQL 中创建具有只读权限和读写权限的账号的步骤和方法学会使用 SQL 命令来创建账号、为账号分配适当的权限以及控制账号对数据库的访问级别了解如何确保…

【C语言】初阶指针详解

目录 一、什么是指针? 1.指针变量 2.指针大小 二、指针类型 三、野指针 四、指针运算 1.指针-整数 2.指针-指针 3.指针的关系运算 五、指针和数组 六、二级指针 七、指针数组 一、什么是指针? 指针是内存中一个最小单元的编号,…

关于APP备案、小程序备案的问题,如何备案?

近日,工信部发布了关于开展移动互联网应用程序备案工作的通知。为落实相关法律法规要求,促进互联网行业规范健康发展,进一步做好移动互联网信息服务管理,现组织开展移动互联网应用程序(以下简称 APP)备案工…

【Echart地图】jQuery+html5基于echarts.js中国地图点击弹出下级城市地图(附完整源码下载)

文章目录 写在前面涉及知识点实现效果1、实现中国地图板块1.1创建dom元素1.2实现地图渲染1.3点击地图进入城市及返回 2、源码分享2.1 百度网盘2.2 123云盘2.3 邮箱留言 总结 写在前面 这篇文章其实我主要是之前留下的一个心结,依稀记得之前做了一个大屏项目的时候&…

搞定libstdc++.so.6 version GLIBCXX_3.4.21 not found

一、问题: 今天在安装whisper的时候,突然间报了这样一个错误: OSError: Could not load shared object file: libllvmlite.so Errors were: [OSError("/lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by /opt/con…

前端技术Vue学习笔记--003

前端技术Vue学习笔记 文章目录 前端技术Vue学习笔记1、Vue生命周期和生命周期的四个阶段1.1、Vue生命周期1.2、生命周期的四个阶段1.3、Vue生命周期函数<font colorred>&#xff08;钩子函数&#xff09; 2、小黑记账本&#xff08;案例&#xff09;3、工程化开发和脚手架…