gpt4 book ai didi

sql - 按证券计算 4 个季度移动平均线

转载 作者:行者123 更新时间:2023-12-03 00:25:17 25 4
gpt4 key购买 nike

为了简化我的问题,假设我有一个按证券划分的季度日期和销售数字表。

月结束日期、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

创建日期索引的第一步工作正常,但“计算移动平均值”部分给我一个错误“对象或列名称丢失或为空”。如果我从 SELECT 行中取出 MAX(month_end_date),它会正常运行,但会给出一个空表结果。

也许我的方法从根本上来说是有缺陷的。

预先感谢您的帮助。

还尝试使用子查询:

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)
)

来自#Temp_Date_Index l其中 r.date_idx>=4按 ID 分组

但是我得到

消息 156,级别 15,状态 1,第 3 行关键字“SELECT”附近的语法不正确。消息 102,第 15 级,状态 1,第 6 行“)”附近的语法不正确。

最佳答案

我的同事向我展示了如何做到这一点:

-- CALCULATE FOUR QUARTER AVERAGES
-- CREATE INDEX OF DATES
DROP TABLE #Temp_Date_Index
GO
SELECT *, date_idx=RANK() OVER(PARTITION BY gvkey ORDER BY month_end_date)
INTO #Temp_Date_Index
FROM #Temp_industrials
GO
CREATE INDEX idx_1 on #Temp_Date_Index(gvkey, date_idx)
GO

-- CALCULATE MOVING AVERAGE
DROP TABLE #Temp_4Q_Avgs
GO
SELECT l.gvkey, l.date_idx, mov_avg=AVG(r.op_inc_ratio)
INTO #Temp_4Q_Avgs
FROM #Temp_Date_Index l, #Temp_Date_Index r
WHERE r.gvkey=l.gvkey AND (r.date_idx BETWEEN (l.date_idx-3) AND l.date_idx)AND r.date_idx>=4
GROUP BY l.gvkey, l.date_idx
GO
CREATE INDEX idx_1 on #Temp_4Q_Avgs(month_end_date, gvkey)
GO

希望其他人也能受益。

关于sql - 按证券计算 4 个季度移动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com