Приветствую, Есть таблица, где сохраняются "состояния" пользователя. В ней есть id, name, group_id и user_id Раньше при изменении состояния, просто добавлялась новая запись. Сейчас будет последняя обновляться. Надо все, кроме последних состояний удалить. Если user_id одинаковый, а group_id разный - эти записи оставить. Это разные состояния Например: Код: id | name | group_id | user_id 1 | Витя | 3 | 6 2 | Вася | 3 | 6 3 | Петя | 4 | 6 Тут повторяются записи с id 1 и 2. Надо удалить id 1 По моему, понятно...
Код: SELECT * FROM t t1 WHERE t1.id = (SELECT MAX(id) FROM t WHERE t.user_id = t1.user_id AND t.group_id = t1.group_id); Это выберет все твои последние записи. Т.е. удали все кроме них.
Добрый день, подскажите пожалуйста. А если необходимо удалить запись под нечетными номерами, как это можно сделать??
Сгруппировать по group_id и user_id, получить список max(id), после этого удалить все записи с id не входящими в этот список
вот так удаляем старые записи, все кроми последних сгруппированных по group_id и user_id если нужно удалить только нечетные записи расскоментируйте строчку с AND IF в самом конце. table1 замените на свое название таблицы. DELETE FROM table1 WHERE ID IN ( SELECT id FROM ( SELECT @row_number:=CASE WHEN @groupid = group_id AND @userid = user_id THEN row_number + 1 ELSE 1 END AS num, @groupid:=group_id as group_id, @userid:=user_id as user_id, id, nameFROM table1ORDER BY group_id, user_id, id DESC) A WHERE A.num > 1 -- AND IF(LEFT(id, 1) % 2 <> 0, 1, 0) = 1 -- нечетные id)