Я не совсем понимаю, какой результат вы ожидаете, однако, чтобы использовать LAG () так, как вы намерены, вам нужно подтянуть его с начальной точки.Я собрал этот пример с использованием CTE, возможно, он может помочь найти идеальное решение в вашем случае.
DECLARE @T TABLE(FiscalPeriod SMALLDATETIME,DivPrice MONEY,DivFactor FLOAT)
INSERT @T VALUES
('01/01/2012',2,1.2),('04/01/2012',4,1.23),('07/01/2012',6,1.1),('10/01/2012',8,1.15),
('01/01/2013',2,1.2),('04/01/2013',4,1.23),('07/01/2013',6,1.1),('10/01/2013',8,1.15)
;WITH Start AS
(
SELECT
EndingUnits = 1, FiscalPeriod,DivPrice, DivFactor
FROM
@T
)
,NormalizedEnding AS
(
SELECT
FiscalPeriod, DivPrice, DivFactor,
EndingUnits = LAG(EndingUnits, 1, 1) OVER (ORDER BY FiscalPeriod) + (LAG(EndingUnits, 1, 1) OVER (ORDER BY FiscalPeriod) / DivPrice * DivFactor)
FROM
Start
),
ContinuationCalulation AS
(
SELECT
FiscalPeriod,DivPrice,DivFactor,
OpeningUnits = LAG(EndingUnits, 1, 1) OVER (ORDER BY FiscalPeriod),
DRIP = (LAG(EndingUnits, 1, 1) OVER (ORDER BY FiscalPeriod))/DivPrice*DivFactor,
x=EndingUnits
FROM
NormalizedEnding
)
SELECT
FiscalPeriod,DivPrice,DivFactor,OpeningUnits,
EndingUnits = OpeningUnits + DRIP,
x
FROM
ContinuationCalulation