2024年1月22日 星期一

[研究]在 SQL Server 中刪除欄位內容相同的記錄,只留日期最新的一筆

[研究]在 SQL Server 中刪除欄位內容相同的記錄,只留日期最新的一筆

2024-01-22

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

TSQL, SQL Server, Table1  的 FieldA 欄位內容可能重複,另有 datetimeA 欄位紀錄該筆建立日期時間,現在 FieldA 欄位內容相同的,只留下一筆,留下日期最新的一筆

ChatGPT

如果你想在 SQL Server 中删除 Table1 中 FieldA 欄位內容相同的记录,只保留日期最新的一条记录,你可以使用 ROW_NUMBER() 函数和 PARTITION BY 子句来标记并删除重复记录。以下是一个示例 T-SQL 查询:

WITH CTE AS (
    SELECT
        FieldA,
        datetimeA,
        ROW_NUMBER() OVER (PARTITION BY FieldA ORDER BY datetimeA DESC) AS RowNum
    FROM
        Table1
)
DELETE FROM CTE WHERE RowNum > 1;

這個查詢使用 ROW_NUMBER() 函數按 datetimeA 欄位降序排序,同時使用 PARTITION BY 子句分組每個 FieldA 的相同值。接著,CTE (Common Table Expression) 中的 RowNum 列將為每個分組賦予排名。

最後,使用 DELETE 語句刪除 RowNum 大於 1 的記錄,這樣就只保留了每個 FieldA 分組中日期最新的一條記錄。請確保在執行任何刪除語句之前,在生產環境中進行測試,以避免意外的數據丟失。

(完)

相關

沒有留言:

張貼留言