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

如何按相同ID分组合并行以去除空值并整合关联数据?

问题解决:分组筛选目标记录

问题背景

现有含重复分组的数据集,需每个分组仅保留特定单条记录;尝试GROUP BY和ROW_NUMBER()方法未达预期。

正确实现方案

方法1:ROW_NUMBER()分区筛选(推荐)

通过CTE或子查询给每个分组内的记录按规则编号,筛选编号为1的记录:

WITH ranked_data AS (
    SELECT 
        *,
        -- 按分组字段分区,按排序字段倒序编号,取每组第一条
        ROW_NUMBER() OVER (PARTITION BY 分组字段 ORDER BY 排序字段 DESC) AS rn
    FROM 你的数据表
)
SELECT *
FROM ranked_data
WHERE rn = 1;
  • 替换分组字段:比如用户ID、类别ID等用于分组的字段
  • 替换排序字段:比如创建时间、金额等决定保留哪条记录的字段,DESC取最新/最大值,ASC取最早/最小值
  • 若分组内有并列值(如同分组同排序值),可改用RANK()或DENSE_RANK()

方法2:GROUP BY+关联查询

先通过聚合找到分组内目标字段的极值,再关联原表获取完整记录:

SELECT t.*
FROM 你的数据表 t
JOIN (
    SELECT 分组字段, MAX(目标字段) AS target_val
    FROM 你的数据表
    GROUP BY 分组字段
) agg ON t.分组字段 = agg.分组字段 AND t.目标字段 = agg.target_val;
  • 若分组内目标字段有多个相同极值,该方法会返回多条记录,需结合ROW_NUMBER()进一步筛选

常见错误排查

  • 遗漏ROW_NUMBER()的PARTITION BY子句,导致全表统一编号而非分组编号
  • GROUP BY时直接选择非聚合字段,返回的记录不符合预期
  • 排序字段选择错误,导致保留的不是目标记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:50:29