5

質問を簡単にするために、セキュリティごとの四半期の日付と販売数の表があるとします。

month_end_date、ID、Sales

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

日付のインデックスを作成する最初のステップは正常に機能しましたが、「CALCULATE MOVING AVERAGE」の部分で、「オブジェクトまたは列の名前が見つからないか空です」というエラーが表示されます。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')'の近くの構文が正しくありません。

4

1 に答える 1

3

私の同僚は私にそれを行う方法を教えてくれました:

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

他の誰かが恩恵を受けることができることを願っています。

于 2012-12-19T18:48:54.300 に答える