【问题标题】:Panel data sql moving average面板数据sql移动平均线
【发布时间】: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

【问题讨论】:

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

标签: sql postgresql


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 2013-10-19
    • 2021-06-24
    • 2017-09-01
    • 2013-12-22
    • 2022-01-26
    • 2013-11-22
    • 2021-06-14
    相关资源
    最近更新 更多