1
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
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
它看起來像你問關於刪除連續(當被認爲是有序的)值。
如果我們假設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');
這似乎符合您的預期輸出(但不是你的既定輸入)
哪兒來'ID = 3' /'C'來從?並且其中做'ID = 4/A'和'ID = 9/C'come從? –
如果使用LINQ到與數據庫進行交互,你應該能夠使用.Distinct()每當你使用的名稱列和「擺脫」的重複這樣的。 – Xariez