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

按条件去重:存在online记录则保留,否则保留最早记录

解决方案

去重规则

  • 若org_id下存在stage = 'online'的记录,保留所有该类记录;
  • 若org_id下无stage = 'online'的记录,仅保留row_number = 1的最早记录。

原始数据

sales_idorg_idstagerow_number
ccc_123cccoff-line1
ccc_123cccoff-line2
ccc_123ccconline3
abc_123abcoff-line1
abc_123abcpower-off2
zzz_123zzzpower-off1

预期结果

sales_idorg_idstage
ccc_123ccconline
abc_123abcoff-line
zzz_123zzzpower-off

SQL 实现(通用窗口函数写法)

适用于支持窗口函数的数据库(MySQL 8+、PostgreSQL、SQL Server等):

WITH org_online_flag AS (
    SELECT 
        sales_id,
        org_id,
        stage,
        row_number,
        -- 标记当前org_id是否存在online记录
        MAX(CASE WHEN stage = 'online' THEN 1 ELSE 0 END) OVER (PARTITION BY org_id) AS has_online
    FROM your_table
)
SELECT sales_id, org_id, stage
FROM org_online_flag
WHERE 
    -- 保留online记录
    stage = 'online'
    -- 或无online记录时保留最早的那条
    OR (has_online = 0 AND row_number = 1);

逻辑说明

  1. 通过CTE给每个org_id分组,标记该组是否存在stage = 'online'的记录(has_online为1表示存在,0表示不存在);
  2. 筛选时优先保留所有stage = 'online'的记录;对于没有online记录的组,仅保留row_number = 1的最早记录,契合原始数据已按row_number升序的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:06:35