postgres: агрегатная функция для нескольких полей - PullRequest
0 голосов
/ 27 марта 2019

Мой стол:

price: numeric, time: timestamp, type: integer

Я хочу сгруппировать по типу и для каждой группы найти максимальную цену и самую раннюю (по времени) цену.

с вычислительной точки зрения, это простая линейная / подобная операции. но как это можно сделать в postgres? есть какая-то существующая функция, подобная этой? я должен создать свой собственный агрегат? я должен закодировать два поля в одно как $time-$price и просто найти минимум из него?

1 Ответ

1 голос
/ 27 марта 2019

Хммм.Postgres не имеет функции агрегации first(), но вместо этого вы можете использовать массивы:

select type,
       max(price),
       array_agg(price order by time asc)[1] as earliest_price
from t
group by type;

РЕДАКТИРОВАТЬ:

Существуют и другие подходы, такие как:

select distinct on (type) type,
       max(price) over (partition by type),
       price
from t
order by type, time asc;
...