我的表是:
price: numeric, time: timestamp, type: integer
我想按类型分组,并为每个组找到最高价格和最早(按时间)价格。
从计算的角度来看,它是一种简单的线性/简化操作。但是如何才能在postgres中完成?有这样的现有功能吗?我必须创建自己的聚合?我应该将两个字段编码为像$time-$price
这样的字段并从中找到最小值吗?
嗯。 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;