SqlServer中根據某幾列獲取重復的數據將其刪除并保留最新一條
有時候,我們某個數據表中,可能有幾列的數據都是一樣的,此時我們可能想查詢出這幾列數據相同的所有數據行,并保留最新一條,將其他重復的數據刪除。
??1、ROW_NUMBER函數
假設我們有如下數據表:
此時我們可以使用ROW_NUMBER
函數,根據某幾列查詢出重復數據的新的排序列,該排序列就是根據某幾列重復數據生成的序號(從1開始),如下所示OrderNo
就是我們新生成的列:
--根據Name和Age這2個字段進行查詢并獲得新的列OrderNo(OrderNo就是根據Name和Age重復數據生成的序號,從1開始),同時按照CreateTime降序排列 SELECT *,OrderNo=ROW_NUMBER() OVER(PARTITION BY [Name],Age ORDER BY CreateTime DESC) FROM dbo.TestTb
??2、刪除數據
有了上述代碼中的排序列,我們就可以知道,OrderNo
的值>1的數據行都是我們需要刪除的數據,完整代碼如下所示:
--刪除表TestTb中字段Name和Age同時重復的數據,并保留最新一條 DELETE FROM dbo.TestTb WHERE Id IN( --根據Name和Age這2個字段查詢出重復的數據 SELECT Id FROM ( --根據Name和Age這2個字段進行查詢并獲得新的列OrderNo(OrderNo就是根據Name和Age重復數據生成的序號,從1開始),同時按照CreateTime降序排列 SELECT *,OrderNo=ROW_NUMBER() OVER(PARTITION BY [Name],Age ORDER BY CreateTime DESC) FROM dbo.TestTb ) Tmp WHERE OrderNo>1 );
執(zhí)行刪除:
刪除后的:
到此這篇關于SqlServer中根據某幾列獲取重復的數據將其刪除并保留最新一條的文章就介紹到這了,更多相關SqlServer獲取重復的數據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何通過sysprocesses 簡單查詢死鎖及解決死鎖最新方案(四步解決)
這篇文章主要介紹了如何通過sysprocesses 簡單查詢死鎖及解決死鎖最新方案,本文分四步幫助大家成功解決,需要的朋友可以參考下2024-02-02Sql Server 2012 轉換函數的比較(Cast、Convert和Parse)
Cast、Convert 和 Parse 都是 Sql Server 2012 中的內置轉換函數,其作用是:一種數據類型轉換為另一種數據類型。其中前兩者的差別較小,但 Parse 為 Sql Server 2012 新增函數,也是最近在分析 Sql Server 2012 新特性的時間,才有想把這3個函數拿出來進行比較分析的想法2012-07-07