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

使用LEAD/LAG函数自连接同表实现指定数据关联的问题

解决方案

根据你的需求,要实现同一用户下相邻Id组(按Seq划分)的分销商关联,避免冗余数据,可按以下两种方式处理:

方式1:保留逐行关联但去重

如果需要每个当前分销商对应下一个Id组的所有分销商,且去除重复的关联行,可使用DISTINCT关键字:

SELECT DISTINCT 
    A.Seq, 
    A.Id, 
    A.Username, 
    A.Distributor, 
    B.Seq AS NextSeq, 
    B.Id AS NextId, 
    B.Distributor AS NextDistributor
FROM #Temp A
LEFT JOIN #Temp B 
    ON A.Username = B.Username 
    AND A.Seq + 1 = B.Seq
WHERE A.Seq = 1 AND A.Username = 'Joe'

方式2:按Id组分组合并分销商

如果希望按Id组(Seq)聚合分销商,得到每组对应下一组的分销商列表,可使用分组聚合+LEAD函数(适用于SQL Server 2017及以上版本):

WITH SeqGroups AS (
    SELECT 
        Username,
        Seq,
        Id,
        STRING_AGG(Distributor, ', ') AS Distributors
    FROM #Temp
    GROUP BY Username, Seq, Id
)
SELECT 
    Username,
    Seq,
    Id,
    Distributors,
    LEAD(Id) OVER (PARTITION BY Username ORDER BY Seq) AS NextId,
    LEAD(Distributors) OVER (PARTITION BY Username ORDER BY Seq) AS NextDistributors
FROM SeqGroups
-- 若需筛选特定用户和Seq,添加WHERE条件
-- WHERE Username = 'Joe' AND Seq = 1

说明

  • 你之前使用自连接产生冗余数据,是因为同一Seq下有多条分销商记录,自连接会产生笛卡尔积,这是正常的;若不需要逐行配对,按组聚合是更简洁的方式。
  • 若使用LEAD函数,需先按用户和Seq分组,否则会逐行取相邻记录,导致同一Seq内的行重复获取下一行的Id,无法得到正确的下一个Id组信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:10:26