У меня есть таблица отображения для запроса предложений (запрос на цитату) и сумма предложения продавца с версией.Postgres получить первую и последнюю версию для отдельного поставщика
Таблица:
id rfq_id(FK) vendor_id(FK) amount version
-----------------------------------------------
1 1 1 100 1
2 1 1 90 2
3 1 1 80 3
4 1 2 50 1
5 1 7 500 1
6 1 7 495 2
7 1 7 500 3
8 1 7 525 4
9 1 7 450 5
10 1 7 430 6
11 2 1 200 1
12 2 2 300 1
13 2 2 350 2
14 2 3 40 1
15 3 4 70 1
В таблице выше, я хочу анализ для первого и последнего предложения поставщика для конкретного rfq_id
.
Ожидаемый результат для rfq_id = 1:
vendor_id first_bid last_bid
---------------------------------
1 100 80
2 50 50
7 500 430
От Postgres : get min and max rows count in many to many relation table я пришел узнать о window
и partition
. Поэтому я попытался выполнить запрос.
SELECT
vendor_id,
version,
amount,
first_value(amount) over w as first_bid,
last_value(amount) over w as last_bid,
row_number() over w as rn
FROM
rfq_vendor_version_mapping
where
rfq_id=1
WINDOW w AS (PARTITION BY vendor_id order by version)
ORDER by vendor_id;
С выше запроса, каждый поставщик МАКСИМАЛЬНАЯ rn
мой выход.
http://sqlfiddle.com/#!15/f19a0/7