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

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

 更新時間:2024年04月28日 14:48:02   作者:Qubernet  
有時候,我們某個數(shù)據(jù)表中,可能有幾列的數(shù)據(jù)都是一樣的,此時我們可能想查詢出這幾列數(shù)據(jù)相同的所有數(shù)據(jù)行,并保留最新一條,將其他重復的數(shù)據(jù)刪除,這篇文章主要介紹了SqlServer中根據(jù)某幾列獲取重復的數(shù)據(jù)將其刪除并保留最新一條,感興趣的朋友一起看看吧

有時候,我們某個數(shù)據(jù)表中,可能有幾列的數(shù)據(jù)都是一樣的,此時我們可能想查詢出這幾列數(shù)據(jù)相同的所有數(shù)據(jù)行,并保留最新一條,將其他重復的數(shù)據(jù)刪除。

??1、ROW_NUMBER函數(shù)

假設我們有如下數(shù)據(jù)表:

此時我們可以使用ROW_NUMBER函數(shù),根據(jù)某幾列查詢出重復數(shù)據(jù)的新的排序列,該排序列就是根據(jù)某幾列重復數(shù)據(jù)生成的序號(從1開始),如下所示OrderNo就是我們新生成的列:


--根據(jù)Name和Age這2個字段進行查詢并獲得新的列OrderNo(OrderNo就是根據(jù)Name和Age重復數(shù)據(jù)生成的序號,從1開始),同時按照CreateTime降序排列
SELECT *,OrderNo=ROW_NUMBER() OVER(PARTITION BY [Name],Age ORDER BY CreateTime DESC) 
FROM dbo.TestTb

??2、刪除數(shù)據(jù)

有了上述代碼中的排序列,我們就可以知道,OrderNo的值>1的數(shù)據(jù)行都是我們需要刪除的數(shù)據(jù),完整代碼如下所示:

--刪除表TestTb中字段Name和Age同時重復的數(shù)據(jù),并保留最新一條
DELETE FROM dbo.TestTb WHERE Id IN(
    --根據(jù)Name和Age這2個字段查詢出重復的數(shù)據(jù)
    SELECT Id FROM
    (
		--根據(jù)Name和Age這2個字段進行查詢并獲得新的列OrderNo(OrderNo就是根據(jù)Name和Age重復數(shù)據(jù)生成的序號,從1開始),同時按照CreateTime降序排列
		SELECT *,OrderNo=ROW_NUMBER() OVER(PARTITION BY [Name],Age ORDER BY CreateTime DESC) 
		FROM dbo.TestTb
    ) Tmp
    WHERE OrderNo>1
);

執(zhí)行刪除:

刪除后的:

到此這篇關于SqlServer中根據(jù)某幾列獲取重復的數(shù)據(jù)將其刪除并保留最新一條的文章就介紹到這了,更多相關SqlServer獲取重復的數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論