УДАЛИТЬ ОТ для записей с тем же идентификатором, но оставить последний в таблице - PullRequest
0 голосов
/ 21 октября 2011

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

id  username    password    last_touch

Возможно иметь одинаковые записи для одного и того же идентификатора. Last_touch - это отметка времени последней команды вставки. Как я могу удалить все записи с одним и тем же идентификатором, кроме последней, которая осталась, чтобы у меня всегда были самые последние данные пользователя?

Где-то вроде:

DELETE FROM user_data 
WHERE id=1 
LIMIT (count(SELECT 1 
             FROM user_data 
             WHERE id=1) - 1)

(Очевидно, что синтаксис в приведенном выше примере неверен, поэтому MySQL жалуется.)

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

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

DELETE FROM user_data
WHERE ID = 1 AND last_touch != 
    (SELECT latest FROM
        (SELECT MAX(last_touch) AS latest FROM user_data WHERE ID = 1) AS temp
    )

Обновление: Исправленопрямая ссылка на таблицу, изменяемую во внутренней SELECT, оборачивая вокруг нее другую SELECT, согласно комментариям Фрэнка.

2 голосов
/ 21 октября 2011
DELETE FROM user_data u
WHERE id=1 
AND last_touch < (SELECT max(last_touch)
                  FROM user_data 
                  WHERE id=u.id)
...