Я не знаю postgres, но это стандартный SQL и может работать для вас.
update entries set
processed = true
where (
select count(*)
from entries as E
where E.user_id = entries.user_id
and E.created > entries.created
) >= 3
Другими словами, обновляйте обработанный столбец до true, если в более поздние даты есть три или более записей для того же user_id. Я предполагаю, что [созданный] столбец уникален для данного user_id. Если нет, вам понадобится дополнительный критерий, чтобы определить, что вы подразумеваете под «последним».
В SQL Server вы можете сделать это, что немного проще и, вероятно, будет выполняться более эффективно:
with T(id, user_id, created, processed, rk) as (
select
id, user_id, created, processed,
row_number() over (
partition by user_id
order by created desc, id
)
from entries
)
update T set
processed = true
where rk > 3;
Обновление CTE является нестандартной функцией, и не все системы баз данных поддерживают row_number.