如何使用 MySQL 查询重复数据的最新一条记录

在日常的数据处理中,我们经常会遇到需要查询数据库中重复数据并且只保留最新一条记录的情况。本文将介绍如何使用 MySQL 来实现这一功能,并给出相应的代码示例。

创建示例数据表

首先,我们创建一个示例数据表 students,包含学生的姓名和考试成绩。

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    score INT,
    exam_date DATE
);

INSERT INTO students (name, score, exam_date) VALUES
('Alice', 85, '2022-01-01'),
('Bob', 78, '2022-01-02'),
('Alice', 90, '2022-01-03'),
('Alice', 88, '2022-01-04'),
('Bob', 82, '2022-01-05');

使用子查询查询重复数据的最新一条记录

下面是使用子查询的方式来查询重复数据的最新一条记录的 SQL 语句。

SELECT s1.id, s1.name, s1.score, s1.exam_date
FROM students s1
JOIN (
    SELECT name, MAX(exam_date) AS max_date
    FROM students
    GROUP BY name
) s2
ON s1.name = s2.name AND s1.exam_date = s2.max_date;

在这段 SQL 语句中,我们首先使用子查询找出每个学生最新的考试日期 max_date,然后将这个子查询的结果与原表进行连接,最终得到每个学生最新一次考试的记录。

结果展示

为了更直观地展示查询结果,我们使用饼状图来展示每个学生最新考试成绩的分布情况。

pie
    title 最新考试成绩分布
    "Alice": 3
    "Bob": 2

从饼状图中可以看出,Alice 和 Bob 分别有3次和2次最新考试成绩记录。

总结

通过本文的介绍,我们学习了如何使用 MySQL 查询重复数据的最新一条记录,并给出了相应的代码示例。这种方法适用于许多场景,如数据清洗、数据分析等。希望本文能帮助读者更好地理解和应用数据库查询技巧。