如何从数据表中删除连续的重复记录?

时间:2017-06-21 09:35:26

标签: c# asp.net vb.net

ID  Name
1   A   
2   B
3   A
5   A
6   A
7   B
10  B

从这些记录中我只想在记录下方,是否可能?

ID  Name
1   A   
2   B
3   C
4   A
7   B
9   C
10  B

1 个答案:

答案 0 :(得分:0)

看起来你要求删除连续的(当被认为是有序的)值时。

如果我们假设ID值应该被视为持续增加而没有间隙,那么它可以很容易地完成 - 只需要左连接回自己并要求前一行具有不同的值,或者前一行不存在(包括第一行):

select cur.ID, cur.[Name]
from @data cur
left outer join @data prev on prev.[ID] = cur.[ID] - 1
where prev.ID is null or prev.[Name] <> cur.[Name]
order by cur.ID

如果我们假设ID值需要连续,那就太棘手了;这里我使用ROW_NUMBER()函数来模拟它:

select cur.ID, cur.[Name]
from (select ID, [Name], Row = ROW_NUMBER() over (order by ID) from @data) cur
left outer join (select ID, [Name], Row = ROW_NUMBER() over (order by ID) from @data) prev
    on prev.[Row] = cur.[Row] - 1
where prev.ID is null or prev.[Name] <> cur.[Name]
order by cur.ID

可能有更好的方法。

在这两个方面,我正在使用:

declare @data table (ID int not null, [Name] char(1) not null);
insert @data (ID, [Name]) values (1,'A'),(2,'B'),(3,'C'),(4,'A'),(5,'A'),
    (6,'A'),(7,'B'),(8,'B'),(9,'C'),(10,'B');

似乎符合您的预期输出(但不是您声明的输入)