Использование функции ранга postgres для ограничения n лучших результатов
Я запрашиваю таблицу счетов кредиторской задолженности, в которой есть список ap-документов, каждый из которых имеет (среди прочих полей) те, в которых я заинтересован, для выполнения сводных запросов:
vendor_id, сумма и дата.
Я хотел бы построить запрос по этой таблице, куда я бы попал, сгруппированные по годам, по 10 лучшим поставщикам, упорядоченным по сумме (сумма сумм).
Кто-нибудь скажет мне, пожалуйста, как использовать функцию ранга для этого.
1 ответ
Решение
select *
from (
select the_year, vendor_id, amount,
row_number() over(
partition by the_year
order by amount desc
) as rn
from (
select
date_trunc('year', the_date) as the_year,
vendor_id,
sum(amount) as amount
from ap
group by 1, 2
) s
) s
where rn <= 10
order by the_year, amount desc