C# 如何从datatable中删除连续的重复记录?
从这些记录中,我只想要下面的记录,有可能吗C# 如何从datatable中删除连续的重复记录?,c#,asp.net,vb.net,C#,Asp.net,Vb.net,从这些记录中,我只想要下面的记录,有可能吗 ID Name 1 A 2 B 3 A 5 A 6 A 7 B 10 B 看起来您正在询问如何删除连续的(当被认为是有序的)值 如果我们假设ID值应被视为连续增加而没有间隙,那么可以很容易地完成-只需将左连接返回给您自己,并要求前一行具有不同的值,或者前一行不存在(包括第一行): 也许有更好的办法 在这两种情况下,我都使用: select cur.ID, cur.[Name] from (select ID, [Na
ID Name
1 A
2 B
3 A
5 A
6 A
7 B
10 B
看起来您正在询问如何删除连续的(当被认为是有序的)值 如果我们假设
ID
值应被视为连续增加而没有间隙,那么可以很容易地完成-只需将左连接返回给您自己,并要求前一行具有不同的值,或者前一行不存在(包括第一行):
也许有更好的办法
在这两种情况下,我都使用:
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
它似乎与您的预期输出(但不是您声明的输入)相匹配。看起来您是在询问删除连续的(当被认为是有序的)值 如果我们假设
ID
值应被视为连续增加而没有间隙,那么可以很容易地完成-只需将左连接返回给您自己,并要求前一行具有不同的值,或者前一行不存在(包括第一行):
也许有更好的办法
在这两种情况下,我都使用:
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
哪个似乎与您的预期输出(但不是您声明的输入)匹配
ID=3
/C
来自哪里?而ID=4/A
和ID=9/C
从何而来?如果您使用Linq与数据库交互,您应该能够在使用Name列时使用.Distinct(),并以这种方式“消除”重复项。ID=3
/C
从何而来?而ID=4/A
和ID=9/C
从何而来?如果您使用Linq与数据库交互,您应该能够在使用Name列时使用.Distinct(),并以这种方式“消除”重复项。
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');