在数据库管理过程中,复制表数据,同时只保留每组重复记录中的第一行。
问题:
源表:FACTORY_NUM_RPS,包含以下字段:
-
ID:记录标识 -
SCHEDULING_DATE_T:计划日期 -
SORT_I:排序索引 -
SERIAL_NUMBER_S:序列号(可能存在重复)
我们的目标是:
-
复制该表到一个新表
-
基于
SERIAL_NUMBER_S字段去除重复记录 -
对于每组重复记录,按照
SCHEDULING_DATE_T和SORT_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;
希望本文对您有所帮助!如果您有任何问题或需要进一步的示例,欢迎留言讨论。

被折叠的 条评论
为什么被折叠?



