面板数据sql移动平均线

Posted

技术标签:

【中文标题】面板数据sql移动平均线【英文标题】:Panel data sql moving average 【发布时间】:2021-12-31 13:55:55 【问题描述】:

我有这些数据:

id Date postal code Type price AVG price
1045 01/01/2020 75011 flat 100
1046 01/02/2020 75011 flat 125
1047 01/03/2020 75011 flat 150
1048 01/01/2020 75011 house 200
1049 01/02/2020 75011 house 300
1050 01/03/2020 75011 house 400
1051 01/01/2020 75012 ..... .....

我想要 3 个或更多周期的移动平均线,我得到类似的结果:

id Date postal code Type price AVG price
1045 01/01/2020 75011 flat 100 100
1046 01/02/2020 75011 flat 125 112,5
1047 01/03/2020 75011 flat 150 125
1048 01/01/2020 75011 house 200 158,33
1049 01/02/2020 75011 house 300 216,66
1050 01/03/2020 75011 house 400 300
1051 01/01/2020 75012 ..... .....

但我希望它能给我一些在类型和价格发生变化时重新开始的东西:

id Date postal code Type price AVG price
1045 01/01/2020 75011 flat 100 100
1046 01/02/2020 75011 flat 125 112,5
1047 01/03/2020 75011 flat 150 125
1048 01/01/2020 75011 house 200 200
1049 01/02/2020 75011 house 300 250
1050 01/03/2020 75011 house 400 300
1051 01/01/2020 75012 ..... .....

现在我的要求是这样的

select ID, date, postal_code, type, price, 
      AVG(price) OVER(ORDER by "date"::date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)AS avg_price 
from x

【问题讨论】:

看起来像是一种差距和孤岛问题。在这里可以找到很多解决方案。 【参考方案1】:

你可以试试这个:

SELECT ID, date, postal_code, type, price, 
       avg(price) OVER (PARTITION BY type ORDER BY "date"::date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  FROM x

【讨论】:

以上是关于面板数据sql移动平均线的主要内容,如果未能解决你的问题,请参考以下文章

SQL 移动平均线

使用 sql 查询计算特定的移动平均线

R中的累积和、移动平均线和SQL“分组依据”等价物

在 SQL Server 2012 中计算移动平均线

使用滞后函数在 SQL 中查找移动平均线

R - 计算 R - 面板数据中多个变量、多年和多个品牌的 4 周滚动窗口的平均值