有时候,我们某个数据表中,可能有几列的数据都是一样的,此时我们可能想查询出这几列数据相同的所有数据行,并保留最新一条,将其他重复的数据删除。
🥇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
);
执行删除:
文章来源:https://www.toymoban.com/news/detail-860799.html
删除后的:
文章来源地址https://www.toymoban.com/news/detail-860799.html
到了这里,关于SqlServer中根据某几列获取重复的数据将其删除并保留最新一条的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!