自学内容网 自学内容网

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)) 

原文地址:https://blog.csdn.net/magicworkshop/article/details/145155264

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!