欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SqlServer中根據某幾列獲取重復的數據將其刪除并保留最新一條

 更新時間:2024年04月28日 14:48:02   作者:Qubernet  
有時候,我們某個數據表中,可能有幾列的數據都是一樣的,此時我們可能想查詢出這幾列數據相同的所有數據行,并保留最新一條,將其他重復的數據刪除,這篇文章主要介紹了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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論