Добрый день! Помогите пожалуйста разобраться с запросом cross apply, MSSQL.
Не совсем корректные данные получаю в результате.
Дано
1) таблица с активами: Assets(AssetID, AssetName, Nominal, ClientPrice)
2) таблица с ценами активов на каждый день: Prices (AssetID, PriceDate, Price,
ClientPrice).
Необходимо разработать хранимую процедуру, которая на вход принимает дату.
В хранимой процедуре должно обновлятся поле ClientPrice таблицы Assets по
данным из таблицы Prices. Если на указанную дату в таблице Prices поле ClientPrice = 0
или NULL, то нужно взять заполненное значение поля ClientPrice (ClientPrice > 0) на
ближайшую дату, предшествующую указанной на входе процедуры.
Необходимо использовать outer apply или cross apply.
CREATE PROCEDURE ClientPrice_Update (
@PriceDate datetime)
AS
UPDATE dbo.Assets
SET
ClientPrice = A.ClientPrice
FROM dbo.Assets as st
CROSS APPLY
(SELECT pt.ClientPrice FROM dbo.Prices pt WHERE pt.AssetID=st.AssetID and pt.ClientPrice=0 and PriceDate<
@PriceDate) AS A
WHERE A.ClientPrice > 0 or A.ClientPrice IS NULL
EXEC ClientPrice_Update
@PriceDate='2012-01-17';