私はこのテーブルを持っています:
CREATE TABLE #Data1
(
[Market] VARCHAR(100) NOT NULL,
[Operator] VARCHAR(100) NOT NULL,
[Date] DATETIME NOT NULL,
[Measure] VARCHAR(100) NOT NULL,
[Amount] NUMERIC(36,10) NOT NULL,
--new calculated fields
[DailyAvg_30days] NUMERIC(38,6) NULL DEFAULT 0
)
を除くすべてのフィールドにデータを入力しましたDailyAvg_30days
。
このフィールドには、過去30日間の合計を表示する必要があります(例:
1 )。Date
特定のレコードが12月2日である場合、11月3日から12月2日までの期間の合計になります。
2.Date
特定のレコードが12月1日の場合、11月2日から12月1日までの期間の合計になります。
テーブルを更新する前にこれらの合計を見つけようとする私の試みは次のとおりです。
SELECT
a.[Market],
a.[Operator],
a.[Date],
a.[Measure],
a.[Amount],
[DailyAvg_30days] = SUM(b.[Amount])
FROM
#Data1 a
INNER JOIN #Data1 b
ON
a.[Market] = b.[Market] AND
a.[Operator] = b.[Operator] AND
a.[Measure] = b.[Measure] AND
a.[Date] > b.[Date]-30 AND
a.[Date] <= b.[Date]
GROUP BY
a.[Market],
a.[Operator],
a.[Date],
a.[Measure],
a.[Amount]
ORDER BY 1,2,4,3
これは有効なアプローチですか、それとも別の角度からアプローチする必要がありますか?
編集
ロジックに欠陥がありました。私の同僚のJagodaが最初に答えを得て、次にGordon Linoffが、私が読みやすい構文を提案しました。
FROM
#DataCas a
INNER JOIN #DataCas b
ON
a.[Market] = b.[Market] AND
a.[Operator] = b.[Operator] AND
a.[Measure] = b.[Measure] AND
b.[Date] BETWEEN a.[Date]-29 AND a.[Date]