mysql去重保留最新一条记录

mysql去重保留最新一条记录

mysql去重保留最新一条记录

概述

在实际的开发中,我们经常需要在MySQL数据库中进行数据去重操作。有时候我们只需要保留每个重复数据中的最新一条记录,而删除其他的重复记录。本文将详细介绍如何使用MySQL语句实现去重保留最新一条记录的操作。

去重保留最新一条记录的方法

1. 创建测试数据表

我们首先创建一个名为test_table的测试数据表,用于演示去重保留最新一条记录的操作。

CREATE TABLE test_table (
    id INT AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

INSERT INTO test_table (name, age) VALUES ('张三', 20);
INSERT INTO test_table (name, age) VALUES ('李四', 25);
INSERT INTO test_table (name, age) VALUES ('王五', 30);
INSERT INTO test_table (name, age) VALUES ('张三', 22);
INSERT INTO test_table (name, age) VALUES ('李四', 28);
INSERT INTO test_table (name, age) VALUES ('王五', 32);
INSERT INTO test_table (name, age) VALUES ('张三', 24);
INSERT INTO test_table (name, age) VALUES ('李四', 29);
INSERT INTO test_table (name, age) VALUES ('王五', 35);

2. 查看原始数据

我们先查看一下原始的测试数据。

SELECT * FROM test_table;

输出如下:

id name age created_at
1 张三 20 2022-01-01 10:00:00
2 李四 25 2022-01-02 11:00:00
3 王五 30 2022-01-03 12:00:00
4 张三 22 2022-01-04 13:00:00
5 李四 28 2022-01-05 14:00:00
6 王五 32 2022-01-06 15:00:00
7 张三 24 2022-01-07 16:00:00
8 李四 29 2022-01-08 17:00:00
9 王五 35 2022-01-09 18:00:00

3. 使用子查询删除重复记录

我们可以使用子查询的方式来删除重复的记录,只保留每个重复数据中的最新一条记录。

DELETE FROM test_table
WHERE (name, age) NOT IN (
    SELECT name, age
    FROM (
        SELECT name, age
        FROM test_table
        ORDER BY created_at DESC
    ) AS t
    GROUP BY name, age
);

4. 查看去重后的数据

我们再次查看一下经过去重操作后的数据。

SELECT * FROM test_table;

输出如下:

id name age created_at
1 张三 24 2022-01-07 16:00:00
2 李四 29 2022-01-08 17:00:00
3 王五 35 2022-01-09 18:00:00

总结

本文介绍了使用MySQL语句实现去重保留最新一条记录的方法。通过一个简单的示例,我们可以清晰地了解到如何使用子查询来删除重复的数据,只保留每个重复数据中的最新一条记录。这个方法可以在实际的开发中帮助我们处理重复数据,保持数据库的一致性和准确性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程