Вы можете выполнить запрос, чтобы получить самый высокий идентификатор, как это было в запросе из вашего комментария , и удалить все строки, где время старше 7 дней, а не самый высокий идентификатор для каждой группы.
Поскольку MySQL не может использовать подзапрос в своей собственной таблице в запросах на обновление / удаление, вы можете использовать подзапрос для получения всех старших идентификаторов, сгруппированных по device_id
.
Замените foo
фактическим именем таблицы.
DELETE FROM foo
WHERE server_time < DATE_SUB(NOW(), INTERVAL 7 DAY)
AND id NOT IN(SELECT *
FROM (SELECT MAX(id)
FROM foo
GROUP BY device_id
) AS t)