在SQL Server中复制表并保留重复记录中的第一行

在数据库管理过程中,复制表数据,同时只保留每组重复记录中的第一行。

问题:

源表:FACTORY_NUM_RPS,包含以下字段:

  • ID:记录标识

  • SCHEDULING_DATE_T:计划日期

  • SORT_I:排序索引

  • SERIAL_NUMBER_S:序列号(可能存在重复)

我们的目标是:

  1. 复制该表到一个新表

  2. 基于SERIAL_NUMBER_S字段去除重复记录

  3. 对于每组重复记录,按照SCHEDULING_DATE_TSORT_I排序后保留第一条记录

解决方案:

方法一:使用ROW_NUMBER()窗口函数

WITH RankedData AS (
    SELECT 
        [ID],
        [SCHEDULING_DATE_T],
        [SORT_I],
        [SERIAL_NUMBER_S],
        ROW_NUMBER() OVER (
            PARTITION BY [SERIAL_NUMBER_S] 
            ORDER BY [SCHEDULING_DATE_T], [SORT_I]
        ) AS RowNum
    FROM [FACTORY_NUM_RPS]
)
SELECT 
    [ID],
    [SCHEDULING_DATE_T],
    [SORT_I],
    [SERIAL_NUMBER_S]
INTO [FACTORY_NUM_RPS_DEDUP]
FROM RankedData
WHERE RowNum = 1;

说明**:
1. `PARTITION BY [SERIAL_NUMBER_S]`将数据按序列号分组
2. `ORDER BY [SCHEDULING_DATE_T], [SORT_I]`指定排序规则
3. `ROW_NUMBER()`为每组内的记录分配序号
4. 最后只选择序号为1的记录(每组的第一条)

方法二:使用DISTINCT关键字(简单去重)

SELECT DISTINCT [SERIAL_NUMBER_S], [其他需要的列...]
INTO [新表名]
FROM [FACTORY_NUM_RPS];

方法三:先创建表结构再插入数据

-- 创建空表结构
SELECT TOP 0 * 
INTO [FACTORY_NUM_RPS_DEDUP]
FROM [FACTORY_NUM_RPS];

-- 插入去重数据
WITH RankedData AS (
    -- 与方法一相同的CTE
)
INSERT INTO [FACTORY_NUM_RPS_DEDUP]
SELECT [列名...]
FROM RankedData
WHERE RowNum = 1;

希望本文对您有所帮助!如果您有任何问题或需要进一步的示例,欢迎留言讨论。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值