Использование функции ранга 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
Другие вопросы по тегам