PostgreSQL有没有办法将结果平均到有限数量的最终结果?

PostgreSQL有没有办法将结果平均到有限数量的最终结果?,postgresql,Postgresql,让我试着用例子来解释我的意思: 我使用的是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 | ... "

让我试着用例子来解释我的意思:

我使用的是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行,我希望第一行是前一百万行数据的平均值。第二行是第二个百万行数据的平均值,依此类推。(显然,这个例子有点极端,我只是夸大了,试图传达我需要做的事情)


谢谢你的帮助和建议

如果您想要日平均值:

select
    date_trunc('day', "date")::date "day",
    avg("data") "data"
from t
group by 1
order by 1
'day'
更改为
'month'
'week'

如果您确实想将数据按日期分为5块:

select
    floor(
        (row_number() over(order by "date"))::double precision
        * 5
        / (select count(*) from t)
    ) chunk,
    avg("data") "data"
from t
group by 1
order by 1

谢谢你的快速回复,请原谅我不是postgreSQL的专家。你能解释一下date_trunc()函数后面的部分是做什么的吗date“day”@Philipp
:date
将日期的结果从时间戳转换为日期<代码>“day”是结果集中该列的别名。