SQL去重保留最新一条

2024年09月26日 SQL去重保留最新一条 极客笔记

SQL去重保留最新一条

在实际的数据处理中,经常会遇到对数据库中重复数据去重的需求。在去重的过程中,我们通常会希望保留最新的一条数据,而将其他重复数据删除。本文将详细介绍在SQL中如何通过查询语句实现去重保留最新一条数据的操作。

问题描述

假设我们有一个名为student的数据库表,该表包含如下字段:

  • id:学生ID,唯一标识每个学生
  • name:学生姓名
  • age:学生年龄
  • date_updated:数据更新时间

现在,该表中可能存在一些重复数据,即nameage相同的记录。我们希望通过SQL查询,去除这些重复数据,并保留每组重复数据中最新的一条记录(即date_updated最大的记录)。

解决方案

为了实现上述的需求,我们可以通过以下步骤来完成去重保留最新一条数据的操作:

  1. 使用ROW_NUMBER()函数为每条记录添加一个序号,按date_updated逆序排列
  2. 在基于序号的查询结果中,选取序号为1的记录作为保留的最新数据

下面是具体的SQL语句实现:

WITH ranked_students AS (
    SELECT 
        id,
        name,
        age,
        date_updated,
        ROW_NUMBER() OVER (PARTITION BY name, age ORDER BY date_updated DESC) AS rn
    FROM 
        student
)
SELECT 
    id,
    name,
    age,
    date_updated
FROM 
    ranked_students
WHERE 
    rn = 1;

在上面的SQL语句中,我们首先使用ROW_NUMBER()函数为每组重复数据添加一个序号rn,并按date_updated逆序排列。然后,在排好序的结果中,我们选取序号为1的记录作为保留的最新数据。最终查询结果将仅包含每组重复数据中最新的一条记录。

示例

假设我们有如下的student表数据:

id name age date_updated
1 Alice 20 2021-01-01
2 Bob 21 2021-02-15
3 Alice 20 2021-03-10
4 Bob 22 2020-12-31
5 Carol 22 2021-04-20

使用上述的SQL语句进行查询后,我们将得到如下结果:

id name age date_updated
3 Alice 20 2021-03-10
4 Bob 22 2020-12-31
5 Carol 22 2021-04-20

从结果可以看出,对于重复数据(如Alice和Bob),我们保留了最新的一条记录。Carol由于没有重复数据,因此仍然保留原记录。

总结

通过本文的介绍,我们学习了如何在SQL中实现对重复数据去重保留最新一条记录的操作。通过使用ROW_NUMBER()函数和子查询,我们可以轻松地完成这一需求。这种方法简洁高效,适用于各种数据库系统,并且能够准确地保留每组重复数据中的最新记录,帮助我们处理实际中的数据重复问题。

本文链接:http://so.lmcjl.com/news/13992/

展开阅读全文