让我试着通过例子来解释我的意思:
我正在使用PostgreSQL版本9.2.1
数据结构如下:
(timedate)date | (float) data | ...
"2013-03-23 03:58:00-04" | 66819.59 | ...
"2013-03-23 03:59:00-04" | 64277.22 | ...
"2013-03-23 03:59:00-04" | 46841.75 | ...
"2013-03-23 04:00:00-04" | 69697.38 | ...
"2013-03-23 04:00:00-04" | 69452.69 | ...
"2013-03-23 04:01:00-04" | 69697.47 | ...
我的表有超过500万个数据点。我已经知道如何在开始和结束日期范围内获取数据。
这是我的问题:当范围太大时,假设它在整个数据范围内它将返回所有500万行,我想限制它返回的行而不省略任何数据
例如,如果我想返回5行,我希望第一行是第一百万行数据的平均值。第二行是第二百万行的数据的平均值,依此类推。(显然这个例子有点极端,我只是夸张地试图传达我需要做的事情)
感谢您的帮助和建议!
答案 0 :(得分:1)
如果你想要平均日期:
select
date_trunc('day', "date")::date "day",
avg("data") "data"
from t
group by 1
order by 1
根据需要更改'day'
或'month'
的{{1}}。
http://www.postgresql.org/docs/current/interactive/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
如果您真的想按日期排序的5个块中划分数据:
'week'