2013-07-12 3 views
1

У меня есть таблица с этими даннымиMysql удалить старые дублирует

идентификатор, идентификатор архива, ЕАН, индекс, дата, (...)

У меня есть некоторые элементы с тем же архивным идентификатором, тот же ean, но другой индекс.

Так что в этом случае я хочу удалить элемент старше (на основе даты), поэтому результатом будет то, что для каждой комбинации archive_id/index будет не более 1 результата.

ответ

2

Следующая (непроверенные) должно работать:

DELETE FROM someTable WHERE EXISTS (SELECT id FROM someTable AS subqTable WHERE 
subqTable.id = someTable.id 
AND subqTable.ean = someTable.ean 
-- and other equality comparisons 
AND subqTable.date AFTER someTable.date) 
+0

есть способ, чтобы проверить его на некоторые ограничены (как 10 пунктов) количество элементов, прежде чем запустить его для всей таблицы? – pie6k

+0

Да, вы можете использовать 'LIMIT' в' DELETE': http://dev.mysql.com/doc/refman/5.5/en/delete.html –

+0

btw Я не уверен, что вы используете .id - это совершенно не важно в моем случае. Это необходимо? Необходимо сохранить только «самый свежий» один из результатов некоторой комбинации (archive_id + index) – pie6k

0
DELETE duplicates.* 
FROM _table 
JOIN _table AS duplicates 
    ON (_table.archive_id = duplicates.archive_id AND _table.index = duplicates.index) 
WHERE duplicates.date < _table.date; 
0
delete t1 
from your_table t1 
left join 
(
    select archive_id, ean, min(date) as mdate 
    from your_table 
    group by archive_id, ean 
) t2 on t1.archive_id = t2.archive_id 
    and t1.ean = t2.ean 
    and t1.date = t2.mdate 
where t2.mdate is null 
Смежные вопросы