Один из вариантов - использовать коррелированный подзапрос, чтобы подсчитать, сколько записей имеет тот же chat_id
и больше timestamp
, чем текущая строка, и использовать результат для фильтрации:
select m.*
from messages m
where (
select count(*)
from messages m1
where m1.chat_id = m.chat_id and m1.timestamp > m.timestamp
) < 10