我有这张桌子:
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]