資料表 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
...
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。