Как удалить строку, если предыдущие имеют одинаковое значение в конкретном столбце - PullRequest
5 голосов
/ 13 августа 2010

Допустим, у меня есть таблица, которая выглядит примерно так:

-------------------------------
id|column2|column3   |column4
-------------------------------
1  value1  somevalue  somevalue
2  value2  somevalue  somevalue
3  value2  somevalue  somevalue <----- I want this column deleted
4  value3  somevalue  somevalue

Как вы можете видеть, я хочу удалить строки, в которых текущая и предыдущая строки имеют одинаковое значение в столбце 2.

Ответы [ 3 ]

5 голосов
/ 13 августа 2010

Я бы попробовал что-то вроде

DELETE FROM Table t1 
WHERE EXISTS (SELECT 1 from Table t2 
              WHERE t1.Column2 = t2.Column2 
              AND t2.Id + 1 = t1.Id) 

Для вашего конкретного запроса я бы использовал t2.Id + 1 = t1.Id вместо t2.Id < t1.Id, поскольку это удаляло бы все вхождения, а не только последовательные записи.

1 голос
/ 13 августа 2010
DELETE FROM Table t1
WHERE EXISTS (SELECT 1 from Table t2
              WHERE t1.Column2 = t2.Column2
              AND t1.Column3 = t2.Column3                  
              AND t1.Column4 = t2.Column4
              AND t2.Id > t1.Id)

ИЛИ если вам нужно сравнить строки только по одному полю

DELETE FROM Table t1
WHERE EXISTS (SELECT 1 from Table t2
              WHERE t1.Column2 = t2.Column2
              AND t2.Id > t1.Id)
0 голосов
/ 18 сентября 2014
delete from table_name where rowid in(
select a.rowid 
from (
      select rowid,
            row_number() over (partition by column_name_having_duplicates order by                  column_name_having_duplicates)rnk 
from table_name a
)a
where a.rnk>1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...