私はSQL Server 2008を使用しています。次の表「予測」があります。
Forecast_ID | Budget_Code | IAM_ID | Forecast | Timestamp
1 | 00-0001 | 24 | 123.41 | '01-01'2010'
2 | 00-0001 | 10 | 111.41 | '02-02'2010' //Is Last
3 | 00-0001 | 44 | 457.10 | '02-02'2010' //Is Last
4 | 00-0002 | 258 | 20 | '01-05'2011' //Is Last
5 | 00-0003 | 3 | 215 | '11-12'2013' //Is Last
6 | 00-0003 | 31 | 85.2 | '10-01'2010'
7 | 00-0003 | 2 | 15 | '10-01'2010'
Budget_Code ごとの最後の「Forecasts」、つまりタイムスタンプが最も高い予測 (Budget_Code ごとに 1 つ以上の行) を含むインデックス付きビューを作成しようとしました。
だから私は次のクエリを行いました:
CREATE VIEW LastForecasts
WITH SCHEMABINDING
AS
SELECT Forecast_ID, Budget_Code, IAM_ID, Forecast
FROM dbo.[Plan] p1
WHERE Timestamp = (
SELECT MAX(Timestamp)
FROM dbo.[Plan] p2
WHERE p1.Budget_Code = p2.Budget_Code)
GO
CREATE UNIQUE CLUSTERED INDEX IDX_V1
ON LastForecasts (Forecast_ID);
GO
しかし、私は次のエラーがあります:
1 つ以上のサブクエリが含まれているため、ビュー "OperationPlanDB.dbo.LastForecasts" にインデックスを作成できません。サブクエリの代わりに結合のみを使用するようにビューを変更することを検討してください。または、このビューにインデックスを付けないことを検討してください。
このサブクエリを回避し、最後の予測でビューにインデックスを付けるにはどうすればよいですか?