如何在PostgreSQL中获得时间戳上的浮动平均值?

时间:2016-09-15 09:56:11

标签: postgresql

我们说我有一张时间表的表格如下:

CREATE TABLE foo (
    spent_on DATETIME,
    hours FLOAT
)

假设spent_on是记录值的时间戳,hours是浮点值,表示在任务上花费的小时数。

如何在过去7天内获得浮动平均小时数?

我提出了以下建议,但它没有成功:

select spent_on, hours, avg(hours)
over RANGE BETWEEN spent_on - INTERVAL '7 days' AND CURRENT ROW from daily;

我收到以下错误:

ERROR:  syntax error at or near "ROW"
LINE 1: ... BETWEEN spent_on - INTERVAL '7 days' AND CURRENT ROW from d...

我试图理解窗口函数的文档,但是我在抓住分区,窗口和框架之间的想法时遇到了麻烦。因此,无法提出查询。

1 个答案:

答案 0 :(得分:2)

我不确定RANGE语法,所以让我提供一个带有子查询的解决方案(如果性能不是小表ETC的问题..):

SELECT t.spent_on,t.hours,
      COALESCE( (SELECT AVG(s.hours) FROM foo
        WHERE t.spent_on > CURRENT_TIMESTAMP - INTERVAL '7 days'),0) float_avg
FROM foo t