You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中处理除日期外重复记录,保留最新日期行的问题

解决方案:保留每组重复记录中fecDate最大的行

针对你的需求,这里提供三种常用的SQL实现方式,解决仅保留data1、data2、data3字段重复组中fecDate最大行的问题:

方法一:GROUP BY 分组聚合(最简方案)

直接按重复字段分组,聚合获取每组的最大日期,这是最适合你当前场景的方案:

SELECT data1, data2, data3, MAX(fecDate) AS fecDate
FROM your_table_name
GROUP BY data1, data2, data3;

你之前仅使用MAX(fecDate)但未添加GROUP BY子句,导致SQL将全表视为一个分组,因此只返回一条记录。添加分组字段后,会按每组单独计算最大日期。

方法二:窗口函数ROW_NUMBER()(灵活扩展方案)

如果后续表中新增其他需要保留的非重复字段,窗口函数可以精准定位到每组中日期最大的行:

WITH ranked_records AS (
    SELECT 
        data1, data2, data3, fecDate,
        -- 按重复字段分区,按日期降序排序,每组第一条即为最大日期行
        ROW_NUMBER() OVER (PARTITION BY data1, data2, data3 ORDER BY fecDate DESC) AS rn
    FROM your_table_name
)
SELECT data1, data2, data3, fecDate
FROM ranked_records
WHERE rn = 1;

该方法支持绝大多数现代SQL数据库(如MySQL 8.0+、PostgreSQL、SQL Server等)。

方法三:子查询关联(兼容老版本数据库)

如果你的数据库不支持窗口函数,可通过子查询获取每组最大日期,再与原表关联匹配目标行:

SELECT t1.data1, t1.data2, t1.data3, t1.fecDate
FROM your_table_name t1
INNER JOIN (
    -- 先获取每组的最大日期
    SELECT data1, data2, data3, MAX(fecDate) AS max_date
    FROM your_table_name
    GROUP BY data1, data2, data3
) t2 
    ON t1.data1 = t2.data1 
    AND t1.data2 = t2.data2 
    AND t1.data3 = t2.data3 
    AND t1.fecDate = t2.max_date;

内容的提问来源于stack exchange,提问作者mikestr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:50:22