繁体   English   中英

每天使用多个值计算 30 天的滚动平均值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM