PostgreSQL中的时间数据库中的移动平均数

3

如何在时间数据库中应用移动平均。我的数据包括温度,我想为每15个记录应用移动平均。


你正在使用哪个版本的PostgreSQL? - Bhavik Ambani
@BhavikAmbani,版本1.16.0。这对我的问题有重要作用吗? - A Kntu
2
@user1885733,1.16.0不是我熟悉的PostgreSQL版本? - hd1
@hd1,也许是:PostgreSQL 9.2.1。 - A Kntu
你确定你正在使用PostgreSQL吗?被接受的答案在PostgreSQL上无法运行。 - user330315
2个回答

3

您可以按以下方式执行查询

marc=# SELECT entity, name, salary, start_date,
        avg(salary) OVER (ORDER BY entity, start_date
                          ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
        FROM salary;

 entity     | name      | salary  | start_date    |         avg         
 -----------+-----------+---------+---------------+----------------------
 Accounting | millicent |  850.00 | 2006-01-01    | 825.0000000000000000
 Accounting | jack      |  800.00 | 2010-05-01    | 916.6666666666666667
 R&D        | tom       | 1100.00 | 2005-01-01    | 966.6666666666666667
 R&D        | john      | 1000.00 | 2008-07-01    | 933.3333333333333333
 R&D        | maria     |  700.00 | 2009-01-01    | 733.3333333333333333
 R&D        | kevin     |  500.00 | 2009-05-01    | 633.3333333333333333
 R&D        | marc      |  700.00 | 2010-02-15    | 600.0000000000000000

我遇到了相应的语法错误:ERROR: 语法错误在或靠近“rows”处 - A Kntu
我不理解你提供的表格,但我会用另一个例子来更新,你可以从那个例子中设计你的查询。请查看我的更新答案。 - Bhavik Ambani

2
 WITH moving_avrag AS (
  SELECT 0 AS [lag] UNION ALL
  SELECT 1 AS [lag] UNION ALL
  SELECT 2 AS [lag] UNION ALL
  SELECT 3 AS [lag] --ETC
)
SELECT
  DATEADD(day,[lag],[date]) AS [reference_date],
  [otherkey1],[otherkey2],[otherkey3],
  AVG([value1]) AS [avg_value1],
  AVG([value2]) AS [avg_value2]
FROM [data_table]
CROSS JOIN moving_avg
GROUP BY [otherkey1],[otherkey2],[otherkey3],DATEADD(day,[lag],[date])
ORDER BY [otherkey1],[otherkey2],[otherkey3],[reference_date];

@user1885733 我想知道为什么这个语句能被接受,因为它甚至不是有效的PostgreSQL语法(#TestDW不是有效的表名,而datead()也不是有效的PostgreSQL函数)。 - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接