首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

如何刪除僅第一欄相同的重複記錄?SQL 刪除策略與範例

     編輯:關於SqlServer

問題情境

資料表 InputData 包含 TagName、TimeStamp、Value 三欄。需求:當 TagName 相同時視為重複,保留最新一筆(或最早一筆),刪除其餘。

範例資料(節錄)

TagName    TimeStamp               Value
MM0008     2007-08-12 0:00:00      1000
MM0008     2007-08-13 0:00:00      1001
...
MM0008     2007-09-07 9:50:22      4444
MM0008     2007-09-07 15:10:56     100
...
MM0009     2007-09-11 15:58:08     501
MM0009     2007-09-11 16:01:58     0
...

解法一:使用 ROW_NUMBER() 分組排序(SQL Server 2005+)

WITH CTE AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY TagName ORDER BY TimeStamp DESC) AS rn
    FROM InputData
)
DELETE FROM CTE WHERE rn > 1;  -- 保留每組最新的一筆

解法二:相關子查詢(相容舊版本)

DELETE FROM InputData
WHERE TimeStamp NOT IN (
    SELECT MAX(TimeStamp) FROM InputData GROUP BY TagName
);

注意事項

  • 若需保留最早一筆,將 ORDER BY TimeStamp ASC 或用 MIN(TimeStamp)。
  • 大量資料建議分批刪除,避免鎖定過久。
  • 先用 SELECT 驗證將被刪除的資料,再執行 DELETE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved