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

MySQL高阶1939-主动请求确认消息的用户

目录

题目

准备数据

分析数据

总结


题目

编写 SQL 查询以查找在 24 小时窗口内两次请求确认消息的用户的 ID。 两个正好相隔 24 小时的消息被认为是在窗口内。 该操作不会影响答案,只会影响请求时间。

以任意顺序返回结果表。

准备数据

Create table If Not Exists Signups (user_id int, time_stamp datetime)
Create table If Not Exists Confirmations (user_id int, time_stamp datetime, action ENUM('confirmed','timeout'))
    Truncate table Signups
    insert into Signups (user_id, time_stamp) values ('3', '2020-03-21 10:16:13')
    insert into Signups (user_id, time_stamp) values ('7', '2020-01-04 13:57:59')
    insert into Signups (user_id, time_stamp) values ('2', '2020-07-29 23:09:44')
    insert into Signups (user_id, time_stamp) values ('6', '2020-12-09 10:39:37')
    Truncate table Confirmations
    insert into Confirmations (user_id, time_stamp, action) values ('3', '2021-01-06 03:30:46', 'timeout')
    insert into Confirmations (user_id, time_stamp, action) values ('3', '2021-01-06 03:37:45', 'timeout')
    insert into Confirmations (user_id, time_stamp, action) values ('7', '2021-06-12 11:57:29', 'confirmed')
    insert into Confirmations (user_id, time_stamp, action) values ('7', '2021-06-13 11:57:30', 'confirmed')
    insert into Confirmations (user_id, time_stamp, action) values ('2', '2021-01-22 00:00:00', 'confirmed')
    insert into Confirmations (user_id, time_stamp, action) values ('2', '2021-01-23 00:00:00', 'timeout')
    insert into Confirmations (user_id, time_stamp, action) values ('6', '2021-10-23 14:14:14', 'confirmed')
    insert into Confirmations (user_id, time_stamp, action) values ('6', '2021-10-24 14:14:13', 'timeout')

 confirmations表

signups表

分析数据

第一步:利用开窗函数range函数确定窗口范围.

select
    user_id,
    count(*) over(
        partition by user_id
        order by time_stamp
        range between interval 24 hour preceding and current row
        ) cnt
from confirmations;

第二步:筛选出24小时以内的数据

select distinct user_id
from (
         select
             user_id,
             count(*) over(
                 partition by user_id
                 order by time_stamp
                 range between interval 24 hour preceding and current row
                 ) cnt
         from confirmations
     ) tmp
where cnt>1;

总结

  • ROWS是根据分区数据排序之后,每一行的 row_number 确定每行关联的 window frame 范围。
  • RANGE是根据分区数据排序之后,每一行的排序列的值确定每行关联的 window frame 范围。

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

相关文章:

  • Go开发指南- Goroutine
  • 如何在CentOS 7上搭建SMB服务
  • StarRocks Summit Asia 2024 全部议程公布!
  • 三周精通FastAPI:37 包含 WSGI - Flask,Django,Pyramid 以及其它
  • 数字孪生在智慧能源项目中的关键作用,你了解多少?
  • uniCloud云对象调用第三方接口,根据IP获取用户归属地的免费API接口,亲测可用
  • 占用消防通道监测摄像机
  • MyBatis-Plus 插件扩展
  • linux强制关闭再启动后zookeeper无法启动
  • 使用Python免费将pdf转为docx
  • JVM频繁Full GC问题的排查与解决方案
  • 展锐平台的手机camera 系统开发过程
  • 2024年最新前端工程师 TypeScript 基础知识点详细教程(更新中)
  • Java启动Tomcat: Can‘t load IA 32-bit .dll on a AMD 64-bit platform报错问题解决
  • 【小沐学GIS】blender导入OpenStreetMap城市建筑(blender-osm、blosm)
  • 数据要素如何重塑企业价值?
  • SpringBoot开发——Spring Boot Controller 最佳实践
  • 数据库 - MySQL介绍
  • 离职员工客户如何管理?解锁2024企业微信新功能
  • 清空当前机器所有Docker容器和镜像
  • C#通过键盘钩子实现二维扫描枪传输数据的接收
  • 亮相世界制造业大会,智象未来(HiDream.ai)揭示产业发展新趋势
  • python爬虫:将知乎专栏文章转为pdf
  • JMeter(需要补充请在留言区发给我,谢谢)
  • Mysql梳理7——分页查询
  • 经验笔记:Python 脚本打包为可执行文件(.exe)