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

如何在SQL Server中通过单列DataFrameId删除重复行

嘿,我来帮你搞定删除OLTMS_5B0395表中重复行的问题!你提到同一DataFrameId对应了多条重复记录,下面分几种常用数据库场景给你解决方案:

针对不同数据库的解决方案

MySQL(8.0+版本,支持窗口函数)

用ROW_NUMBER()窗口函数标记重复行,然后删除序号大于1的记录(保留每组DataFrameId的第一条,这里按id排序,你也可以换成时间列Rec):

DELETE t
FROM OLTMS_5B0395 t
JOIN (
    SELECT id, DataFrameId,
           ROW_NUMBER() OVER (PARTITION BY DataFrameId ORDER BY id) AS rn
    FROM OLTMS_5B0395
) dup ON t.id = dup.id
WHERE dup.rn > 1;

MySQL(5.x版本,不支持窗口函数)

用自连接的方式删除重复行,保留每组DataFrameId中id最小的那条:

DELETE t1
FROM OLTMS_5B0395 t1
JOIN OLTMS_5B0395 t2 
ON t1.DataFrameId = t2.DataFrameId AND t1.id > t2.id;

PostgreSQL

用CTE(公共表表达式)标记重复行后删除:

WITH dup_rows AS (
    SELECT id,
           ROW_NUMBER() OVER (PARTITION BY DataFrameId ORDER BY id) AS rn
    FROM OLTMS_5B0395
)
DELETE FROM OLTMS_5B0395
WHERE id IN (SELECT id FROM dup_rows WHERE rn > 1);

SQL Server

同样用CTE简化删除逻辑:

WITH dup_rows AS (
    SELECT id,
           ROW_NUMBER() OVER (PARTITION BY DataFrameId ORDER BY id) AS rn
    FROM OLTMS_5B0395
)
DELETE FROM dup_rows
WHERE rn > 1;

重要提醒

  • 执行删除操作前,务必先备份表数据,或者先把DELETE换成SELECT语句,确认要删除的记录完全符合预期
  • 如果想保留每组DataFrameId的最新记录,把ORDER BY后的id改成Rec DESC(示例数据里的Rec是时间列)
  • 若需要保留特定条件的重复行,调整ORDER BY后的排序字段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:09:55