已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。
上个月关门了。
Improve this question
MonthName Calendar_Year Total Number Moving Average 5 Year Moving Average 10 Year
April 2000 135
April 2001 76
April 2002 33
April 2003 31
April 2004 228
April 2005 200 101
April 2006 350 114
April 2007 126 168
April 2008 102 187
April 2009 126 201
April 2010 333 181 141
April 2011 137 207 161
April 2012 121 165 167
April 2013 36 164 175
April 2014 79 151 176
April 2015 272 141 161
April 2016 282 129 168
April 2017 96 158 161
April 2018 93 153 158
April 2019 181 164 158
April 2020 64 185 163
April 2021 144 143 136
April 2022 126 116 137
April 2023 236 122 137
August 2000 66
August 2001 83
August 2002 118
August 2003 236
August 2004 117
August 2005 84 124
August 2006 151 128
August 2007 157 141
August 2008 221 149
August 2009 178 146
August 2010 171 158 141
August 2011 154 176 152
August 2012 267 176 159
August 2013 164 198 174
August 2014 249 187 166
August 2015 149 201 180
August 2016 122 197 186
August 2017 247 190 183
August 2018 160 186 192
August 2019 73 185 186
August 2020 176 150 176
August 2021 164 156 176
August 2022 275 164 177
August 2023 52 170 178
上表是从excel中获得的,如何在sql中执行5年和10年移动平均值,例如2005年4月的5年移动平均值是(2000年4月至2004年4月)和2006年4月的平均数为(2001年4月至2005年),10年移动平均值相同,其中2010年8月为平均值(2000年8月至2009年)我想复制上述格式在sql查询,与空白的那些没有以前的5年或10年的数据?
2条答案
按热度按时间ryhaxcpt1#
SQL有一个名为
lag
的东西,它是解决移动平均线等问题的天赐之物,但由于您提到需要根据每年中的特定月份计算移动平均线,因此您需要确保数据正确对齐;为此,我们使用avg()。我将给予一个关于如何使用提供的列名编写查询的粗略想法-
我们使用一个表表达式
MovingAverages
为avg()
创建一个窗口函数,然后按月份名称对数据进行分区,并按年份对其进行排序,ROWS BETWEEN
表示滑动窗口的范围。lb3vh1jj2#
你可以尝试使用
avg() over(partition by month name order by year asc range between 5 preceding and 1 preceding)