为了简化我的问题,假设我有一个按安全性划分的季度日期和销售数字表。
month_end_date、ID、销售额
我需要计算每个 ID 的 4 个季度移动平均值。我尝试执行以下操作:
-- CALCULATE FOUR QUARTER AVERAGES
-- CREATE INDEX OF DATES
SELECT *, date_idx=RANK() OVER(PARTITION BY ID ORDER BY month_end_date)
INTO #Temp_Date_Index
FROM #Temp_industrials
GO
CREATE INDEX idx_1 on #Temp_Date_Index(ID, date_idx)
GO
-- CALCULATE MOVING AVERAGE
SELECT MAX(month_end_date), ID, Sales_avg=AVG(Sales)
INTO #Temp_4Q_Avgs
FROM #Temp_Date_Index
WHERE date_idx>=4 AND (date_idx BETWEEN date_idx AND (date_idx-4))
GROUP BY ID
创建日期索引的第一步工作正常,但“计算移动平均”部分给我一个错误“对象或列名丢失或为空”。如果我MAX(month_end_date)
从 SELECT 行中取出它,它运行没有错误,但给了我一个空表结果。
也许我的方法存在根本缺陷。
提前感谢您的帮助。
还尝试使用子查询:
SELECT end_of_period=MAX(month_end_date), ID,
op_inc_avg=AVG(
SELECT r.Sales
FROM #Temp_Date_Index r
WHERE r.date_idx BETWEEN l.date_idx AND (l.date_idx-3)
)
FROM #Temp_Date_Index l WHERE r.date_idx>=4 GROUP BY ID
但我得到
消息 156,级别 15,状态 1,第 3 行关键字“SELECT”附近的语法不正确。消息 102,级别 15,状态 1,第 6 行 ')' 附近的语法不正确。