Try
DELETE d FROM dummy1 d JOIN ( SELECT d1.id, d1.name, MAX(d1.last_used_date) max_date FROM dummy1 d1 JOIN dummy1 d2 ON d1.id = d2.id AND d1.name = d2.name GROUP BY id, name ) q ON d.id = q.id AND d.name = q.name AND d.last_used_date <> q.max_date
Here is the SQLFiddle demo
UPDATE . To check only duplicate identifiers, you can slightly modify the above query
DELETE d FROM dummy1 d JOIN ( SELECT d1.id, MAX(d1.last_used_date) max_date FROM dummy1 d1 JOIN dummy1 d2 ON d1.id = d2.id GROUP BY id ) q ON d.id = q.id AND d.last_used_date <> q.max_date
Here is the SQLFiddle demo
UPDATE2 To remove cheats with a maximum timestamp
1) you can enter a unique index with the IGNORE option. In this case, MySql decides which records remain.
ALTER TABLE dummy1 ENGINE MyISAM; ALTER IGNORE TABLE dummy1 ADD UNIQUE (id, name); ALTER TABLE dummy1 ENGINE InnoDB;
source share