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

如何按seqnum规则筛选客户主/次地址并修复现有SQL查询错误

需求实现SQL方案

核心逻辑调整思路

  • 第一步:按客户ID分组,先对同客户下的所有地址按seqnum升序排序,对重复的street只保留首次出现(即seqnum最小)的记录,过滤掉后续重复street的地址
  • 第二步:对去重后的同客户地址,再次按seqnum升序打行号
  • 第三步:行转列聚合,行号为1的取为MainAddress,行号为2的取为SecondaryAddress

可运行SQL代码

WITH dedup_address AS (
    -- 第一步:同客户同street只保留seqnum最小的记录,过滤重复street
    SELECT 
        cus_id,
        seqnum,
        street,
        city,
        -- 给同客户同street的记录打序号,只保留序号=1的
        ROW_NUMBER() OVER(PARTITION BY cus_id, street ORDER BY seqnum ASC) AS street_rn
    FROM Address
),
valid_address AS (
    -- 第二步:给去重后的同客户地址按seqnum升序打全局序号
    SELECT 
        cus_id,
        seqnum,
        street,
        city,
        ROW_NUMBER() OVER(PARTITION BY cus_id ORDER BY seqnum ASC) AS addr_rn
    FROM dedup_address
    WHERE street_rn = 1 -- 只保留每个street首次出现的记录
)
-- 第三步:行转列取主、次地址
SELECT 
    cus_id,
    MAX(CASE WHEN addr_rn = 1 THEN street END) AS MainAddress,
    MAX(CASE WHEN addr_rn = 1 THEN city END) AS MainCity,
    MAX(CASE WHEN addr_rn = 2 THEN street END) AS SecondaryAddress,
    MAX(CASE WHEN addr_rn = 2 THEN city END) AS SecondaryCity
FROM valid_address
GROUP BY cus_id

样例数据输出结果

cus_idMainAddressMainCitySecondaryAddressSecondaryCity
1232 MainNYCNULLNULL
4237 WesParisNULLNULL
5125 ElmLA4 NavLA

原有SQL问题说明

你之前的写法错误点在于固定筛选了seqnum=1作为主地址、seqnum=2作为次地址,没有处理两个场景:

  1. 部分客户的最小seqnum不是1(比如样例中cus_id=123的最小seqnum是4)
  2. 同客户下小seqnum的street可能重复,需要跳过重复值取下一个不同的street

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:15:05