Если я не ошибаюсь, то MySQL не позволяет удалять данные из той же самой таблицы, из которой делается выборка в подзапросе для выбора данных. Лучше все таки - эту задачу разбить на две:
1) Выбрать всех уникальных user_id и их MAX(date), с группировкой по user_id;
2) Удалить информацию по каждому пользователю через обычный DELETE ... WHERE user_id = ... AND date < выбранной.
Если хотите сделать удаление именно на стороне MySQL - то можно сделать хранимую процедуру, куда передавать user_id и дальше все нужные операции проводить уже в ней.
Но если нужно одним запросом, то можно попробовать обернуть в подзапрос.
delete from test where id in (
select t3.id from (
select
id
from test AS t1, (
select
t.user_id,
MAX(t.date) AS date
from test as t
group by t.user_id) AS t2 where t1.user_id = t2.user_id AND t1.date < t2.date
) AS t3
);
Но это такое себе решение.