У меня есть следующий запрос, который извлекает id из последнего N observations для каждого station:
SELECT id
FROM (
SELECT station_id, id, created_at,
row_number() OVER(PARTITION BY station_id
ORDER BY created_at DESC) AS rn
FROM (
SELECT station_id, id, created_at
FROM observations
) s
) s
WHERE rn <= #{n}
ORDER BY station_id, created_at DESC;
У меня есть индексы на id, station_id, created_at.
Это единственное решение, с которым я столкнулся, который может получить более одной записи на каждую станцию. Однако он довольно медленный (154,0 мс для таблицы из 81000 записей).
Как ускорить запрос?