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

MySQL:GROUP BY分组时排除特定列值重复的行

解决时序数据GROUP BY时排除重复行的问题

没问题,这个需求完全可以实现,核心思路是先对「记录时间+位置+数值」完全相同的重复行去重,再按时间维度聚合求和。下面给你两种常用的SQL解决方案,适配大多数关系型数据库:

方法一:先用DISTINCT去重,再聚合

这种方法最直观,先通过子查询筛选出所有唯一的行组合,再外层按时间分组求和:

SELECT 
    record_time,
    SUM(value) AS total_value
FROM (
    -- 子查询保留所有三列完全唯一的行
    SELECT DISTINCT 
        record_time,
        position,
        value
    FROM time_series_data
) AS unique_rows
GROUP BY record_time;

针对你的示例数据,子查询会把重复的09:05:00 FRONT 100和09:05:00 BACK 25各保留一行,外层聚合后就能得到09:05:00 125的正确结果。

方法二:双层GROUP BY去重聚合

如果不想用DISTINCT,也可以通过两次分组来实现:内层先按「时间+位置+数值」分组(自动合并重复行),外层再按时间求和:

SELECT 
    record_time,
    SUM(unique_value) AS total_value
FROM (
    -- 内层分组合并重复行,因为重复行的value相同,用MAX/AVG都可以
    SELECT 
        record_time,
        position,
        MAX(value) AS unique_value
    FROM time_series_data
    GROUP BY record_time, position, value
) AS unique_rows
GROUP BY record_time;

这种方法和方法一的效果完全一致,适合习惯用分组逻辑处理去重的场景。

注意事项

  • 如果你的重复行仅存在「记录时间+位置」相同,但数值可能不同的情况,那需要调整去重逻辑(比如保留最新的数值),但根据你的示例,当前的方案完全匹配需求。
  • 不同数据库可能有一些语法细节差异,但核心逻辑通用(比如MySQL、PostgreSQL、SQL Server都支持上述写法)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:49:36