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

SQL查询需求:识别重复original_ctr_id并替换为对应最大ctr_id

解决方案:替换重复original_ctr_id为对应组最大ctr_id

要实现你需要的逻辑——检查original_ctr_id是否重复,重复的话就把该组所有行的这个字段替换成对应组里最大的ctr_id,用窗口函数是最适合的方案,既不用聚合整行丢失数据,又能拿到分组后的统计值。

直接上可用的SQL:

SELECT
    -- 判断当前original_ctr_id是否重复,重复则用组内最大ctr_id替换
    CASE
        WHEN COUNT(*) OVER (PARTITION BY original_ctr_id) > 1 THEN MAX(ctr_id) OVER (PARTITION BY original_ctr_id)
        ELSE original_ctr_id
    END AS new_original_ctr_id,
    -- 保留原表的其他列,这里示例保留ctr_id,有其他列直接加在这里即可
    ctr_id
FROM [MIS].[dbo].[Test]
ORDER BY new_original_ctr_id;

代码说明:

  • COUNT(*) OVER (PARTITION BY original_ctr_id):统计每个original_ctr_id对应的行数,行数大于1就说明这个值重复了
  • MAX(ctr_id) OVER (PARTITION BY original_ctr_id):计算同一个original_ctr_id分组里的最大ctr_id值
  • CASE语句根据是否重复,决定用替换值还是保留原来的original_ctr_id
  • 这个写法不会像GROUP BY那样合并行,能完整保留原表的所有行数据,完全符合你的需求

你之前用GROUP BY的问题在于,它会把同一original_ctr_id的行合并成一行,丢失了原始的多行数据,而窗口函数OVER(PARTITION BY)是在不改变行结构的前提下做分组统计,正好解决你的痛点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:30:44