У меня есть следующий запрос, который извлекает 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 записей).
Как ускорить запрос?