[英]Calculating a rolling 30 day average with multiple values per day
我有一張看起來像這樣的表:
城市 | 日期 | 價值 |
---|---|---|
直流電 | 2020-01-01 | 10 |
直流電 | 2020-01-01 | 23 |
直流電 | 2020-01-02 | 43 |
紐約市 | 2020-01-01 | 43 |
紐約市 | 2020-01-02 | 23 |
紐約市 | 2020-01-03 | 10 |
每個城市、每個日期有多個值。 我很難計算前瞻性的 30 天平均值,因為滾動平均值中的條件應該基於日期而不是基於行數。 我希望 output 是這樣的:
城市 | 日期 | 價值 |
---|---|---|
直流電 | 2020-01-01 | 25.33 |
直流電 | 2020-01-02 | 43 |
紐約市 | 2020-01-01 | 25.33 |
紐約市 | 2020-01-02 | 16.5 |
紐約市 | 2020-01-03 | 10 |
所以我不能做這樣的事情:
AVG(value) OVER (
PARTITION BY city, date
ORDER BY date DESC
ROWS BETWEEN 31 PRECEDING AND 1 PRECEDING
)
像這樣加入自己的表格:
SELECT t1.city, t1.date, avg(t2.values)
FROM table1 t1
JOIN table1 t2 ON t1.city=t2.city
AND t2.date < DATEADD('day',31,t1.date)
AND t2.date >= t1.date
不是一個選擇,因為它很大並且需要很長時間。 我該怎么做呢?
您想在 window 框架中使用 RANGE 而不是 ROWS。 但這需要按號碼訂購。 所以你需要做:
over (... order by datediff(date,'1970-01-01') asc range between 31 preceding and 1 following)
(雖然我認為你想要 0 關注?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.