2016-02-29 2 views
1

Я читал предыдущие вопросы, но они не похожи на мои (example это не имеет уникального идентификатора, а у меня есть).Как удалить строки из таблицы, где некоторые столбцы (но не все) дублируются в postgresql?

говорит, что это мои таблицы строки:

id  string  x y z time_x     
10318 'hello' 33700 5053 8 2015-07-03 12:39:49.61408 
14071 'hello' 33700 5053 8 2015-07-03 12:39:49.61408 

в основном все то же самое, за исключением идентификатора строки. Как определить эти случаи и удалить избыточные строки?

Примечание: не все строки в таблице дублируются. Регулярные строки должны быть оставлены как есть.

+0

Возможный дубликат https://stackoverflow.com/questions/3777633/delete-duplicate-rows-dont-delete-all-duplicate – hruske

+0

@hruske это не отвечает мой вопрос. – quack

ответ

5

Пусть говорят, что имя таблицы TBL

Delete from tbl where id not in (select min(id) from tbl group by string, x, y, z)

+1

http://sqlfiddle.com/#!15/76f0c/1/2 – artm

+0

Хороший сервис. Закладка добавлена – dabal

0

Этот запрос использует функцию окна, чтобы найти дублированные строки. Он оставляет строку с наименьшим идентификатором:

delete from foo_table where id in (
    select dupid from (
     SELECT lead(id) over (partition by string, x, y, z, time_x order by id) dupid 
     from foo_table 
    ) A where dupid is not null 
); 
Смежные вопросы