我使用 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 的最后一个“预测”创建一个索引视图,即具有最高时间戳的预测(每个 Budget_Code 一个或多个行)。
所以我做了以下查询:
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
但我有以下错误:
无法在视图“OperationPlanDB.dbo.LastForecasts”上创建索引,因为它包含一个或多个子查询。考虑将视图更改为仅使用联接而不是子查询。或者,考虑不索引此视图。
如何避免此子查询并使用最新预测索引我的视图?