【发布时间】: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