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

基于SZERZODES_ID的记录筛选与去重需求问询

基于SZERZODES_ID的记录筛选与去重需求问询

嘿,我明白你要解决的是基于SZERZODES_ID的记录筛选问题,需求里的细节很关键,我先帮你明确规则,再结合你给的示例数据给出解决方案:

需求规则梳理

你想要的筛选逻辑可以拆解为两条核心规则:

  • 对于任意SZERZODES_ID,如果该分组下存在至少一条PARTNER_ID非空的记录,那么只保留这个分组里所有PARTNER_ID非空的记录
  • 如果某个SZERZODES_ID下所有记录的PARTNER_ID都是NULL,则保留该分组的全部记录

你的示例数据

先把你提供的原始数据整理成更清晰的表格:

SZERZODES_IDMUNKALAP_IDCSAPATVEZETO_IDPARTNER_ID
100000001000000123,323682
100000001000000123,323[NULL]
100000001000000223,323[NULL]
100000001000000223,323682
100000001000000323,323[NULL]
100000001000000423,323682
100000001000000523,323682
100000001000000523,323682
100000001000000623,323682
100000001000000623,323682
20000000200000014,957[NULL]
20000000200000024,957[NULL]
20000000200000034,957[NULL]
20000000200000044,957[NULL]

可行的SQL解决方案

这里用窗口函数来实现你的需求,逻辑清晰且效率较高:

WITH grouped_records AS (
    SELECT 
        *,
        -- 统计当前SZERZODES_ID分组下,PARTNER_ID非空的记录总数
        COUNT(CASE WHEN PARTNER_ID IS NOT NULL THEN 1 END) 
        OVER (PARTITION BY SZERZODES_ID) AS non_null_partner_count
    FROM your_table -- 替换成你的实际表名
)
SELECT 
    SZERZODES_ID,
    MUNKALAP_ID,
    CSAPATVEZETO_ID,
    PARTNER_ID
FROM grouped_records
WHERE 
    -- 情况1:该分组没有非空的PARTNER_ID,全部保留
    non_null_partner_count = 0
    -- 情况2:该分组有非空PARTNER_ID,只保留PARTNER_ID非空的记录
    OR PARTNER_ID IS NOT NULL;

逻辑说明

  1. 第一步通过CTE给每条记录标记所属SZERZODES_ID分组的非空PARTNER_ID记录数
  2. 第二步根据标记筛选:
    • 如果non_null_partner_count = 0,说明这个分组里所有记录的PARTNER_ID都是NULL,直接全部保留
    • 否则只留下PARTNER_ID非空的记录,符合你要的筛选规则

针对你给的示例数据,执行这个SQL后:

  • SZERZODES_ID = 10000000会只保留所有PARTNER_ID=682的记录(共8条)
  • SZERZODES_ID = 20000000的全部4条记录都会被保留

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:53:00