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

如何编写TSQL查询为分组重复用户生成前后行ID用于合并?

TSQL 重复用户合并映射表实现方案

你可以通过SQL Server的LEAD窗口函数快速实现需求,完整查询如下:

WITH UserMergeGroup AS (
    SELECT
        FullName AS 姓名,
        Birthdate AS 出生日期,
        UserID AS [合并源ID(Merge From)],
        LEAD(UserID) OVER (
            PARTITION BY FullName, Birthdate 
            ORDER BY UserID ASC
        ) AS [合并目标ID(Merge To)]
    FROM #tmpUsers
)
SELECT 姓名, 出生日期, [合并源ID(Merge From)], [合并目标ID(Merge To)]
FROM UserMergeGroup
WHERE [合并目标ID(Merge To)] IS NOT NULL
ORDER BY 姓名, 出生日期, [合并源ID(Merge From)];

实现逻辑说明

  • 用PARTITION BY FullName, Birthdate将姓名、出生日期完全相同的用户划分为同一分组
  • 每个分组内按UserID升序排序,符合你将小号合并到大号、最终保留最大ID的需求
  • LEAD窗口函数直接提取分组内当前行的下一个UserID作为合并目标,每个分组最大的ID没有下一行值,会返回NULL,过滤掉这部分行即可得到全部需要执行的合并映射关系

如果需要把结果存入临时表供后续流程使用,只需要在SELECT后增加INTO #tmpMergeMapping即可,示例:

WITH UserMergeGroup AS (
    SELECT
        FullName AS 姓名,
        Birthdate AS 出生日期,
        UserID AS [合并源ID(Merge From)],
        LEAD(UserID) OVER (
            PARTITION BY FullName, Birthdate 
            ORDER BY UserID ASC
        ) AS [合并目标ID(Merge To)]
    FROM #tmpUsers
)
SELECT 姓名, 出生日期, [合并源ID(Merge From)], [合并目标ID(Merge To)]
INTO #tmpMergeMapping
FROM UserMergeGroup
WHERE [合并目标ID(Merge To)] IS NOT NULL
ORDER BY 姓名, 出生日期, [合并源ID(Merge From)];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:03