当前位置: 首页 > article >正文

SQL,力扣题目1107,每日新用户统计

一、力扣链接

LeetCode_1107

二、题目描述

Traffic 表:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user_id       | int     |
| activity      | enum    |
| activity_date | date    |
+---------------+---------+
该表可能有重复的行。
activity 列是 ENUM 类型,可能取 ('login', 'logout', 'jobs', 'groups', 'homepage') 几个值之一。


编写解决方案,找出从今天起最多 90 天内,每个日期该日期首次登录的用户数。假设今天是 2019-06-30 

以 任意顺序 返回结果表。

三、目标拆解

四、建表语句

Create table If Not Exists Traffic (user_id int, activity ENUM('login', 'logout', 'jobs', 'groups', 'homepage'), activity_date date)
Truncate table Traffic
insert into Traffic (user_id, activity, activity_date) values ('1', 'login', '2019-05-01')
insert into Traffic (user_id, activity, activity_date) values ('1', 'homepage', '2019-05-01')
insert into Traffic (user_id, activity, activity_date) values ('1', 'logout', '2019-05-01')
insert into Traffic (user_id, activity, activity_date) values ('2', 'login', '2019-06-21')
insert into Traffic (user_id, activity, activity_date) values ('2', 'logout', '2019-06-21')
insert into Traffic (user_id, activity, activity_date) values ('3', 'login', '2019-01-01')
insert into Traffic (user_id, activity, activity_date) values ('3', 'jobs', '2019-01-01')
insert into Traffic (user_id, activity, activity_date) values ('3', 'logout', '2019-01-01')
insert into Traffic (user_id, activity, activity_date) values ('4', 'login', '2019-06-21')
insert into Traffic (user_id, activity, activity_date) values ('4', 'groups', '2019-06-21')
insert into Traffic (user_id, activity, activity_date) values ('4', 'logout', '2019-06-21')
insert into Traffic (user_id, activity, activity_date) values ('5', 'login', '2019-03-01')
insert into Traffic (user_id, activity, activity_date) values ('5', 'logout', '2019-03-01')
insert into Traffic (user_id, activity, activity_date) values ('5', 'login', '2019-06-21')
insert into Traffic (user_id, activity, activity_date) values ('5', 'logout', '2019-06-21')

五、过程分析

1、找出用户第一天登录的日期

2、找出第一天登录日期与指定日期间隔90天以内的日期,并计算人数

六、代码实现

with t1 as(
select user_id, activity, activity_date, row_number() over(partition by user_id order by activity_date) rn
from Traffic
where activity = 'login' 
)
select activity_date login_date, count(user_id) user_count
from t1 
where rn = 1
and datediff('2019-06-30', activity_date) <= 90
group by activity_date;

七、结果验证

八、小结

1、CTE表达式 + 窗口函数 + datediff()

2、思路:找出每个用户第一天登录的日期之后再进行过滤90天以内的日期


http://www.kler.cn/a/393530.html

相关文章:

  • 准确率调整研究中心
  • elementui el-table中给表头 el-table-column 加一个鼠标移入提示说明
  • 数字后端教程之Innovus report_property和get_property使用方法及应用案例
  • 文件输入输出——NOI
  • 【学习】Fine-tuning知识汇总
  • 文件夹被占用了无法删除怎么办?强制粉碎文件夹你可以这样操作
  • Unity中实现战斗帧同步的高级技术
  • 网安加·百家讲坛 | 仝辉:金融机构鸿蒙应用安全合规建设方案
  • 重构代码之内联方法
  • 7、computed计算属性使用
  • 数据库参数备份
  • 爬虫开发工具与环境搭建——开发工具介绍
  • Spring Boot——日志介绍和配置
  • LeetCode 3249.统计好节点的数目:深度优先搜索(DFS)
  • WPF 中的视觉层和逻辑层有什么区别?
  • 问题(十九)JavaAgent-ByteBuddy与CGLIB字节码增强冲突问题
  • 基于Java Springboot高校实验室管理系统
  • SpringBoot(二)集成mybatis
  • WPF-控件的属性值的类型转化
  • CSS教程(七)- 背景
  • python语言基础-4 常用模块-4.11 OS库
  • LINUX系统中的挂载(Mounting)
  • Nuxt3
  • YoloV10改进策略:Block改进|VOLO,视觉识别中的视觉展望器|即插即用|附代码+改进方法
  • kafka 在Linux安上的装部署
  • 定时任务进行简单监控、爬虫的自动化之旅