我们正在尝试计算滚动平均值并试图转换大量SO解决方案来解决问题。至此,我们仍然没有成功。在SQL Server中计算递归滚动平均值
我们已经试过:
下面是一些我们已经考虑了SO答案。
- SQL Server: How to get a rolling sum over 3 days for different customers within same table
- SQL Query for 7 Day Rolling Average in SQL Server
- T-SQL calculate moving average
我们最新的尝试是修改的解决方案之一(#4)这里找到。 https://www.red-gate.com/simple-talk/sql/t-sql-programming/calculating-values-within-a-rolling-window-in-transact-sql/
例:
这里是SQL小提琴一个例子:http://sqlfiddle.com/#!6/4570a/17
在拨弄,我们仍然试图让SUM工作权,但最终我们正在试图让平均。
最终目标
使用的小提琴例子,我们需要找到Value1和ComparisonValue1之间的差异,目前作为DIFF1。当一行没有Value1可用时,我们需要通过取最后两个Diff1值的平均值来估计它,然后将其添加到该行的ComparisonValue1。
有了正确的查询,结果是这样的:
GroupID Number ComparisonValue1 Diff1 Value1
5 10 54.78 2.41 57.19
5 11 55.91 2.62 58.53
5 12 55.93 2.78 58.71
5 13 56.54 2.7 59.24
5 14 56.14 2.74 58.88
5 15 55.57 2.72 58.29
5 16 55.26 2.73 57.99
问题:是可以计算这个平均值时,它可能因素纳入平均值以下行的?
更新:
- 增加了一个着眼于小提琴架构来简化最终的查询。
- 更新了查询以包含Diff1的新滚动平均值(列Diff1Last2Avg)。这个滚动平均值很好,直到我们遇到Value1列中的空值。这是我们需要插入估算的地方。
- 已更新query以包含在没有Value1(列Value1Estimate)时应使用的估计值。如果我们可以在Value1列中使用估计来代替NULL,这是非常好的工作。由于Diff1列反映了Value1(或其估计值)与ComparisonValue1之间的差异,因此Estimated将填充Diff1中的所有NULL值。这反过来将继续允许计算未来行的估计值。在这一点上它变得令人困惑,但仍然在嘲笑它。有任何想法吗?
如果可能减少记录的数量和添加问题的预期结果以表格的形式。好问题 –
什么版本的SQL? – Xedni
@Xedni SQL Server 2008中 –