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