Как получить первые n записей для каждого значения одного поля?
Попробуй оконные функции  https://www.postgresql.org/docs/current/tutorial-w...
в частности row_number()
with numbered_rows as (
    select
        *,
        row_number() over(partition by user_id order by col2) as rn -- нумеруем строки каждого юзера в порятке возрастания col2
    from t
) select * from numbered_rows where rn < 4 -- выбираем первые 3 строки на юзера
order by user_id, rn;
Пример:
https://sqlize.online/s/6W