MySQL удаляет дубликаты в одном столбце, оставляя наименьшее и наибольшее значения на основе второго столбца

У меня есть таблица, содержащая два столбца:

count | when
101   | 10:11
101   | 10:12
102   | 10:13
102   | 10:14
102   | 10:15
102   | 10:16
103   | 10:17
105   | 10:18
105   | 10:19
105   | 10:20

Мне нужно удалить все повторяющиеся записи count, но оставить две строки с наименьшим и наибольшим значением when:

count | when
101   | 10:11
101   | 10:12
102   | 10:13 _ removed 2 rows
102   | 10:16
103   | 10:17
105   | 10:18 _ removed 1 row
105   | 10:20

Это делается для того, чтобы свести к минимуму размер таблицы, которая в основном используется для статистических целей, поэтому точки с одинаковыми значениями по оси Y не имеют значения.


person Xeos    schedule 22.08.2013    source источник


Ответы (1)


MySQL поддерживает синтаксис join для команды delete.

Используя этот синтаксис, вы можете настроить фильтр для удаления соответствующих записей:

delete t
    from yourtable t join
         (select count, min(when) as minwhen, max(when() as maxwhen
          from yourtable
          group by count
         ) tokeep
         on t.count = tokeep.count and (t.when > tokeep.minwhen and t.when < tokeep.maxwhen);
person Gordon Linoff    schedule 22.08.2013