ローリング平均を計算しようとしており、数多くの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を使用できない場合は、最後の2つの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
質問:それは潜在的に次の行の平均に織り込むことができるとき、この平均値を算出することができますか?
更新:
- は、最終的なクエリを簡素化するためにフィドルスキーマにVIEWを追加しました。
- Diff1(列Diff1Last2Avg)の新しいローリング平均を含めるようにクエリを更新しました。このローリング平均は、Value1列でNULLを実行するまで有効です。ここで推定値を挿入する必要があります。
- queryに、Value1(列Value1Estimate)がない場合に使用する見積もりを含めるように更新しました。これはうまくいっており、Value1列にNULLの代わりに見積もりを使用することができれば完璧です。 Diff1列にはValue1(またはその推定値)とComparisonValue1の差が反映されるため、Estimateを含めてDiff1のすべてのNULL値を入力します。これにより、引き続き将来の行の見積もりを計算できるようになります。この時点では混乱しますが、まだそれをハッキングしています。何か案は?アイデアのための
可能であれば、レコードの数を減らし、問題のテーブル形式で期待される結果を追加します。良い質問 –
どのバージョンのSQLですか? – Xedni
@Xedni SQL Server 2008 –