Not tested, but something like these lines might work:
DELETE t.* FROM table t JOIN ( SELECT id @rowNum := IF(@otherfield <> otherfield, 1, @rowNum + 1) rn, @otherfield := otherfield otherfield FROM ( SELECT id, otherfield FROM table ORDER BY otherfield, id DESC ) t, (SELECT @otherfield := NULL, @rowNum := -1) dm ) rs ON t.id = rs.id WHERE rs.rn > 3
source share