2017-06-21 56 views
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 
+4

哪兒來'ID = 3' /'C'來從?並且其中做'ID = 4/A'和'ID = 9/C'come從? –

+0

如果使用LINQ到與數據庫進行交互,你應該能夠使用.Distinct()每當你使用的名稱列和「擺脫」的重複這樣的。 – Xariez

回答

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'); 

這似乎符合您的預期輸出(但不是你的既定輸入)