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

devtools/2025/1/17 2:15:33/

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:记录的时间戳。

以下是测试数据:

idevent_time
12025-01-01 12:00:00
22025-01-01 12:04:59
32025-01-01 12:05:00
42025-01-01 12:10:00

背景

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

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

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


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

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

SQL 实现

SELECTid,event_time
FROM (SELECTid,event_time,FLOOR(UNIX_TIMESTAMP(event_time) / (5 * 60)) 

http://www.ppmy.cn/devtools/151141.html

相关文章

Unity 3D游戏开发从入门进阶到高级

本文精心整理了Unity3D游戏开发相关的学习资料,涵盖入门、进阶、性能优化、面试和书籍等多个维度,旨在为Unity开发者提供全方位、高含金量的学习指南.欢迎收藏。 学习社区 Unity3D开发者 这是一个专注于Unity引擎的开发者社区,汇聚了众多Un…

HTML5 加载动画(Loading Animation)

加载动画(Loading Animation)详解 概述 加载动画是指在数据加载过程中,向用户展示的一种视觉效果,旨在提升用户体验,告知用户系统正在处理请求。它可以减少用户的等待焦虑感,提高界面的互动性。 常见的加…

JVM之垃圾回收器ZGC概述以及垃圾回收器总结的详细解析

ZGC ZGC 收集器是一个可伸缩的、低延迟的垃圾收集器,基于 Region 内存布局的,不设分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记压缩算法 在 CMS 和 G1 中都用到了写屏障,而 ZGC 用到了读屏障 染色指针&a…

洛谷P2404 自然数的拆分问题 刷题笔记 DFS

题目链接https://www.luogu.com.cn/problem/P2404 一道深搜问题 注意观察答案的特点 得出判断合法答案的条件如何表述 观察答案特点 后面的数要比前面的数大 因此我们要加入一些判断 来保证答案合法 逐个数字进行拆分 用数组存答案 如果一个数是奇数 分解成两个数相加…

C/C++中,const、static关键字有什么作用,如何定义、初始化,什么情形下需要用到这两关键字?

在C和C编程中,const和static是两个非常重要的关键字,它们各自有独特的作用和使用场景。下面分别介绍这两个关键字的作用、定义和初始化方法,以及何时需要使用它们。 const 关键字 作用 const关键字用于声明一个变量为常量,即该…

华为2024嵌入式研发面试题

01 你认为最好的排序算法是什么? 在实际的编程中,最好的排序算法要根据实际需求和数据规模来选择,因为每种排序算法都有其优势和劣势。以下是一些常见排序算法及其优缺点: 冒泡排序 冒泡排序是一种简单直观的排序算法&#xff0…

探索 Vue.js 组件开发的新边界:动态表单生成技术

随着前端技术的飞速发展,Vue.js 作为一款灵活、易用且性能优异的框架,一直是开发者心中的不二之选。本文将深入介绍 Vue.js 组件开发中的最新技术之一:动态表单生成技术,并通过具体实例展示如何实现这一高效技术。 为什么选择动态…

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建 点击绿色按钮,并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具,在上篇…