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

MySQL 排除指定时间内重复记录的解决方案

MySQL 排除指定时间内重复记录的解决方案

在实际的数据库操作中,我们经常需要排除时间间隔小于一定范围(例如 5 分钟)的重复记录。本文总结了几种实现这一需求的 MySQL 解决方案。

表结构

假设我们有一张记录数据的表 event_logs,其结构如下:

CREATE TABLE event_logs (
    id INT PRIMARY KEY AUTO_INCREMENT,
    event_time DATETIME NOT NULL
);

-- 插入测试数据
INSERT INTO event_logs (id, event_time) VALUES
(1, '2025-01-01 12:00:00'),
(2, '2025-01-01 12:04:59'),
(3, '2025-01-01 12:05:00'),
(4, '2025-01-01 12:10:00');

该表包含以下字段:

  • id:记录的唯一标识符。
  • event_time:记录的时间戳。

以下是测试数据:

id event_time
1 2025-01-01 12:00:00
2 2025-01-01 12:04:59
3 2025-01-01 12:05:00
4 2025-01-01 12:10:00

背景

我们的需求是从该表中排除 5 分钟内的重复记录,保留的记录具有如下特征:

  • 第一条记录始终保留。
  • 后续记录与上一次保留记录的时间差至少为 5 分钟。

以下是实现这一需求的几种方案。


方案 1:通过时间戳计算过滤记录

这个方案通过将时间戳转换为整数并按固定时间间隔分组,从而排除 5 分钟内的重复记录。然而,这种方法在边界条件下可能出现误差,比如当两个记录的时间都接近 5 分钟的边界时,可能会错误地将两个记录都保留。

SQL 实现

SELECT
    id,
    event_time
FROM (
    SELECT
        id,
        event_time,
        FLOOR(UNIX_TIMESTAMP(event_time) / (5 * 60)) 

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

相关文章:

  • 如何制作一个高质量的 Dockerfile 镜像:从入门到实践
  • 个人主页搭建全流程(Nginx部署+SSL配置+DCDN加速)
  • OpenCV基础:矩阵的创建、检索与赋值
  • dockerfile2.0
  • 优先级队列(算法十四)
  • bochs+gdb调试linux0.11环境搭建
  • VSCode连接远程docker环境
  • 宝塔面板 申请证书后 仍然提示不安全
  • 神经网络:什么是交叉熵?
  • C++并发编程之异常安全性增强
  • 基于ADMM交替方向乘子法的超大规模储备系统分布式协同优化算法收敛性matlab仿真与分析
  • PostgreSQL 的一些常用命令
  • LabVIEW与WPS文件格式的兼容性
  • 如何搭建 Vue.js 开源项目的 CI/CD 流水线
  • 《大语言模型后训练技术:指令、偏好、强化微调的深度解析与发展趋势》
  • 计算机网络 (42)远程终端协议TELNET
  • Vue2+OpenLayers给标点Feature添加信息窗体(提供Gitee源码)
  • 基于django中医药数据可视化平台(源码+lw+部署文档+讲解),源码可白嫖!
  • LeetCode热题100-二叉树的中序遍历【JavaScript讲解】
  • 11-1.Android 项目结构 - androidTest 包与 test 包(单元测试与仪器化测试)
  • 【C】数组和指针的关系
  • Ubuntu 安装和配置 MariaDB
  • 【行空板K10】上传温湿度信息到EasyIoT平台
  • redis闪退打不开Creating Server TCP listening socket *:6379: listen: Unknown error
  • ESP8266固件烧录
  • 利用Python爬虫按图搜索1688商品(拍立淘)的探索之旅