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

SQL Server 2014中如何编写T-SQL实现ProfileID+ArrivalDate组合去重?

解决SQL Server 2014中按组合去重保留任意记录的问题

嘿,针对你这个需求,我给你两种在SQL Server 2014里完全可行的写法,你可以根据实际情况选择:

方法一:使用窗口函数ROW_NUMBER()(灵活可控)

这种方法的好处是,如果你之后需要指定保留某条特定记录(比如最小/最大BkgID),只需要改排序逻辑就行,非常灵活:

WITH RankedData AS (
    SELECT 
        BkgID,
        ProfileID,
        ArrivalDate,
        -- 按ProfileID和ArrivalDate分组,每组内随机选择一条记录
        ROW_NUMBER() OVER (PARTITION BY ProfileID, ArrivalDate ORDER BY (SELECT NULL)) AS RowNum
    FROM Table1
)
SELECT BkgID, ProfileID, ArrivalDate
FROM RankedData
WHERE RowNum = 1;

说明:

  • PARTITION BY ProfileID, ArrivalDate 表示把相同ProfileID+ArrivalDate的记录归为一组
  • ORDER BY (SELECT NULL) 让SQL Server随机选取组内的一条记录;如果想固定保留最小的BkgID,改成ORDER BY BkgID ASC,最大则改成ORDER BY BkgID DESC

方法二:使用GROUP BY+聚合函数(简洁高效)

如果你的需求只是“保留任意一个BkgID”,用GROUP BY配合MIN/MAX聚合函数会更简洁直观:

SELECT 
    MIN(BkgID) AS BkgID, -- 换成MAX(BkgID)也可以,按需选择
    ProfileID,
    ArrivalDate
FROM Table1
GROUP BY ProfileID, ArrivalDate;

说明:

  • 按ProfileID和ArrivalDate分组后,用MIN或MAX取组内的一个BkgID,结果完全符合你的去重要求
  • 这种写法性能通常不错,尤其是当ProfileID和ArrivalDate有联合索引的时候,查询效率会更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:19:01