我們正在嘗試計算滾動平均值並試圖轉換大量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中 –