На данный момент времени актив имеет эффективную цену. Некоторые активы имеют новую цену один раз в неделю, некоторые раз в день. Самая последняя цена - это «эффективная цена».
Временная таблица, в которой хранятся описанные отношения, выглядит следующим образом:
CREATE TABLE dbo.AssetPrice
(
AssetId int NOT NULL -- FK to the table dbo.Asset
,EffectiveDate datetime NOT NULL
,Price decimal NOT NULL
CONSTRAINT PK_AssetPrice PRIMARY KEY CLUSTERED (AssetId,EffectiveDate,Price)
)
Данные выглядят примерно так:
AssetId EffectiveDate Price
------- ------------- -----
1 2012-01-11 1.21
1 2012-01-12 1.22
2 2012-01-11 3.55
2 2012-01-12 3.60
3 2012-01-04 5.15
3 2012-01-11 5.14
Запросить эффективную цену для AssetId
просто, но для вычисления требуется не тривиальное количество времени.
Идеально хранить данные физически, так что только изменение данных на dbo.AssetPrice
требует пересчета эффективной цены. Я считаю, что не могу создать индексированное представление, потому что соответствующие индексные функции не разрешены в индексированном представлении.
Как настроить таблицу для быстрого получения эффективной цены (самой последней цены)?