首页 > 其他分享 >1141-查询近30天活跃用户数

1141-查询近30天活跃用户数

时间:2023-07-11 15:44:07浏览次数:48  
标签:ac 1141 -- 30 activity date id 用户数

查询近30天活跃用户数

原文地址:1141. 查询近30天活跃用户数 - 力扣(LeetCode)

  • 题目如下所示

个人题解

这题主要考察 MySQL 中 DATE 数据类型的操作和 GROUP BY 用法。个人思考过程如下所示

  • -- 1. 建表
    CREATE TABLE 1141_Activity(
    	user_id INT,
    	session_id INT,
    	activity_date DATE,
    	activity_type ENUM('open_session', 'end_session', 'scroll_down', 'send_message')
    );
      -- 2. 编写 SQL 查询 截至 2019-07-27(包含),近 30 天的每日活跃用户数量(当天只要有一条活动记录,即为活跃用户)
    
      -- 1)查询 近30 天的用户(使用 DATEDIFF 函数)
    
      SELECT * FROM 1141_Activity ac WHERE DATEDIFF('2019-07-27', ac.activity_date) <= 30
    
      -- 2) 查询每日活跃用户数量
    
      SELECT ac.activity_date day, COUNT( DISTINCT ac.user_id ) active_users FROM 1141_Activity ac WHERE DATEDIFF('2019-07-27', ac.activity_date) <= 30 GROUP BY ac.activity_date HAVING COUNT(ac.session_id) >= 1;
    
      -- 看上去没错,实际上还是错了,暂时没找到原因
    
      -- 第一步,这个 DISTINCT 用法有没有问题?
    
      -- 没问题
    
      -- 第二部,这个 DATEDIFF 有没有问题?
    
      -- diff 这里还需要做一个 大于 0 的判断,不然负数也是小于 30 的(PS:题目有点怪怪的,说了包含但是却不能等于 30)
    
      SELECT ac.activity_date day, COUNT( DISTINCT ac.user_id ) active_users FROM 1141_Activity ac WHERE DATEDIFF('2019-07-27', ac.activity_date) < 30 AND DATEDIFF('2019-07-27', ac.activity_date) > 0 GROUP BY ac.activity_date HAVING COUNT(ac.session_id) >= 1;
    
      -- where 过滤
    
      SELECT ac.activity_date day, COUNT( DISTINCT ac.user_id ) active_users FROM 1141_Activity ac WHERE DATEDIFF('2019-07-27', ac.activity_date) < 30 AND DATEDIFF('2019-07-27', ac.activity_date) > 0 GROUP BY ac.activity_date HAVING COUNT(ac.session_id) >= 1;
    
      -- having 过滤
    
      SELECT ac.activity_date day, COUNT( DISTINCT ac.user_id ) active_users FROM 1141_Activity ac GROUP BY ac.activity_date HAVING DATEDIFF('2019-07-27', ac.activity_date) <30 and DATEDIFF('2019-07-27', ac.activity_date) > 0 AND COUNT(ac.session_id) >= 1;
    
      -- 我个人认为 having 过滤较为高效一些,因为这样子 DATEDIFF 函数就少判断了很多次
    
      -- 官网上的题解 基本都是 不带我后面这个 COUNT(ac.session_id) >= 1 的判断的,因为 既然在 Activity 表中,则说明 COUNT(ac.session_id) 会永远大于等于 1
    
      -- 同时 时间过滤还可以用 between and 稍微简化一下下,如下所示
    
      SELECT ac.activity_date day, COUNT( DISTINCT ac.user_id ) active_users FROM 1141_Activity ac GROUP BY ac.activity_date HAVING DATEDIFF('2019-07-27', ac.activity_date) BETWEEN 0 and 29;
    
    

标签:ac,1141,--,30,activity,date,id,用户数
From: https://www.cnblogs.com/OnlyOnYourself-lzw/p/17544891.html

相关文章

  • AT_abc306_h 题解
    AT_abc306_hBalanceScale题解Links洛谷AtCoderDescription有\(N\)个编号为\(1,2,\dots,N\)的砝码。有\(M\)次比较操作,每次比较砝码\(A_{i}\)和\(B_{i}\),\(A_{i}\)在左侧。分为三种情况:左边的砝码更重。右边的砝码更重。两边的砝码重量相同。将每次比较的......
  • Metasploit Pro 4.22.1-2023070501 (Linux, Windows) - 渗透测试框架
    MetasploitPro4.22.1-2023070501(Linux,Windows)-渗透测试框架Rapid7Penetrationtesting请访问原文链接:https://sysin.org/blog/metasploit-pro-4/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org世界上最广泛使用的渗透测试框架知识就是力量,尤其是当它被......
  • 西门子200转以太网模块300plc以太网上传程序
    内容摘要大家好,今天我们要为大家介绍一款神奇的设备——捷米特ETH-S7200-JM01以太网模块!它可以让西门子PLC200CPU226拥有以太网通讯接口,实现数据采集和生产管理系统构建。你以为这就是它的全部功能?那你就大错特错了! 除了实现以太网通讯,捷米特ETH-S7200-JM01还有其他神奇的功......
  • MPI转以太网模块西门子plc300以太网组态
    你有没有想过,微生物发酵行业的生产控制可以如此先进?今天我们要介绍的是一项关于MPI转以太网模块在发酵集散控制系统中的应用。  这个系统由上位机和下位机组成,可以实现工程师站和操作员站之间的无缝连接,同时还可以实现远程工作站的实时监控。在下位机方面,它不仅含有以太网通......
  • 新版Springboot3.0打造能落地的高并发仿12306售票系统
    第1章课程介绍与学习指南3节|22分钟本章主要对课程做整体介绍,其中包括:课程要解决的问题、课程特色和亮点、课程内容安排、学完大家的收获,以及在学习方法上提出的建议与指导。 第2章12306这个系统架构到底有多牛?8节|71分钟本章主要对课程为什么选择12306课程作为实战......
  • Java-Day-30( 多用户即时通信系统 —— 登录 + 获取在线用户列表 )
    Java-Day-30多用户即时通信系统需求分析用户登录拉取在线用户列表无异常退出私聊群聊发文件服务器推送新闻用户登录功能说明我们暂时人为规定用户名/id=100,密码123456就可以登录,其他用户不能登录后面使用HashMap模拟数据库,可以多个用户登录思路......
  • 20230710-20230711 数论
    数论被薄纱了/kk授课老师:南京大学-朱富海教授20230710裴蜀定理对于给定不全为零的整数的\(a,b\)一定存在一对整数\(x,y\)满足\(ax+by=gcd(a,b)\)。证明:\(a==0\)\(or\)\(b==0\)显然成立;设\(gcd(a,b)=d\),即求证存在\(x,y\)满足\(ax+by=d\),等式两边同时除......
  • Atcoder ABC308H Make Q
    考虑枚举唯一一个度数为\(3\)的点\(u\),即既在环上又与非环上一点相连的那个点。接下来考虑先处理环,那可以先把\(u\)从图上删掉,环的最短距离便是与\(u\)有连边的\(2\)个点在图上最短路长度加上\(2\)个点与\(u\)连边的长度,即\(\min\{w_{u,i}+w_{u,j}+\operator......
  • 20230710巴蜀暑期集训测试总结
    T1打个不太暴的暴力但是爆了。只对了subtask1,不清楚发生了什么。先建出Kruscal重构树,对每个询问二分答案,判断就用暴力启发式合并T2打了一个\(20pts\)dp。第一步没有想到,每怎么见过这种题。将问题转化为满足\(\foralli,x_i\leA_i,x_i\leB_i\)的序列\(x\)个数。枚......
  • KOS版本2303定制ISO镜像
    环境及版本查看拷贝和挂载镜像把KOS2303镜像拷贝至主机并且挂载#mountKylin-Desktop-V10-SP1-General-Release-2303-X86_64.iso/mnt2303新建iso目录用于定制iso镜像#mkdir/iso因为挂载目录只读所以需要把所有文件复制到/iso目录进行定制化操作从挂载目录把所有......