面板数据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移动平均线的主要内容,如果未能解决你的问题,请参考以下文章