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
連続した(順序付きと見なされた)値を削除するよう求めているようです。
値が連続して増加するとみなされると仮定すると、それはかなり簡単に行うことができます。自分自身に戻って左の結合を行い、前の行が異なる値を持つことを要求するか、 (最初の行を含めるために)存在しません:
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'が出ましたか? –
データベースと対話するためにLinqを使用している場合は、名前列を使用し、そのように複製を '取り除く'ときはいつでも、.Distinct()を使用できるはずです。 – Xariez