【发布时间】:2015-03-13 07:14:18
【问题描述】:
我有一个名为 trades 的表,用于保存具有以下架构的货币交易数据:
id - uuid
timestamp - timestamp without time zone
price - numeric
我希望能够以可以构建蜡烛图的方式进行查询。为此,我需要 第一价、最后价、最高价和最低价,按以下方式分组时间间隔。到目前为止,我有这个:
CREATE FUNCTION ts_round( timestamptz, INT4 ) RETURNS TIMESTAMPTZ AS $$
SELECT 'epoch'::timestamptz
+ '1 second'::INTERVAL * ( $2 * ( extract( epoch FROM $1 )::INT4 / $2 ) );
$$ LANGUAGE SQL;
SELECT ts_round( timestamp, 300 ) AS interval_timestamp
, max(price) AS max, min(price) AS min
FROM trades
GROUP BY interval_timestamp
ORDER BY interval_timestamp DESC
我如何在这些时间间隔内获得第一价和最后价?
【问题讨论】:
-
您如何定义
first price和last price?按时间戳? -
我严重怀疑您的功能是否符合您的实际需求。在 四舍五入 到整秒之后,它实际上是 截断 到 n 秒的间隔。我怀疑您真的想将 或 舍入到 n 秒间隔。对吗?
-
欧文,感谢您的反馈!您能否建议如何改进该功能?或者我应该为此创建一个新问题?
-
@MattBeedle:它到底应该做什么?
标签: sql postgresql aggregate-functions greatest-n-per-group window-functions