Я прочитал предыдущие вопросы, но они не похожи на мои (пример это не имеет уникального идентификатора, пока есть у меня).

Скажем, это строки моих таблиц:

  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

В основном все то же самое, кроме идентификатора строки. Как я могу определить эти случаи и удалить лишние строки?

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

1
quack 29 Фев 2016 в 14:32

2 ответа

Лучший ответ

Допустим, имя таблицы - tbl

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

5
artm 29 Фев 2016 в 11:47

Этот запрос использует оконную функцию для поиска повторяющихся строк. Он оставляет строку с наименьшим идентификатором:

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 
);
0
hruske 29 Фев 2016 в 11:56