Как получить первые n записей для каждого значения одного поля?
К примеру, есть таблица phone_book. В нем есть поле customer_id, которое хранит id клиента. Необходимо вытащить для каждого уникального customer_id, первые 1000 записей с таким customer_id
Получение данных в таком формате было реализовано на php путем получения в один массив `select customer_id from phone_book group by customer_id`, после чего для каждого элемента этого массива($customer_id) выполнялось "select * from phone_book where customer_id = `$customer_id` limit 1000", и добавлялось в результирующий массив.
Меня интересует можно ли получить этот же результат в одном запросе, тк текущяя реализация работает очень медленно
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;