есть таблица mdate, где есть 3 столбца user_id, message_id, message_date, и мне надо удалить все сообщения, кроме самих последних от каждого юзера.
select * from mdate m1
LEFT JOIN (
SELECT _user_id, max(message_date) as 'max_message_date'
FROM mdate GROUP BY _user_id ) m2
ON m1.message_date = m2.max_message_date AND
m1._user_id = m2._user_id
WHERE m2._user_id is null;
этот запрос выводить все записи которые не последние, т.е. старые , если сделаю с inner join и без where ,
тогда выводить все последнее сообщения, а при delete говорить что синтаксическая ошибка? и понят не могу где ошибка?
delete from mdate m1
LEFT JOIN (SELECT _user_id, max(message_date) as 'max_message_date'
FROM mdate GROUP BY _user_id ) m2 ON m1.message_date = m2.max_message_date
AND m1._user_id=m2._user_id
WHERE m2._user_id is null;
пробовал и другой вариант
вот запрос
delete from mdate m0 where m0.message_id not in
(select m1.message_id from mdate m1
JOIN ( SELECT mg._user_id, max(mg.message_date) as 'max_message_date'
FROM mdate as mg GROUP BY mg._user_id ) m2
ON m1.message_date = m2.max_message_date
AND m1._user_id = m2._user_id);
тоже не работает?!
система Debian, версия mysql или mariadb как вам убодно: 10.1.26-MariaDB-0+deb9u1