2010-08-13 7 views
4

Disons que j'ai une table qui ressemble à quelque chose comme ceci:Comment supprimer la ligne si la précédente ont la même valeur dans une colonne spécifique

------------------------------- 
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 

Comme vous pouvez le voir, je veux supprimer les lignes où le courant et la ligne précédente ont la même valeur dans la colonne2.

Répondre

4

Je voudrais essayer quelque chose comme

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

Pour votre requête spécifique, j'utiliser le t2.Id + 1 = t1.Id au lieu de t2.Id < t1.Id comme cela supprimerait toutes les occurrences, pas les entrées consécutives seulement.

1
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) 

OU si vous avez besoin de comparer les lignes par un simple champ

DELETE FROM Table t1 
WHERE EXISTS (SELECT 1 from Table t2 
       WHERE t1.Column2 = t2.Column2 
       AND t2.Id > t1.Id) 
0
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); 
Questions connexes