给定起始值和@pStartingValue
一个表,其中包含仅使用 TSQL 在每个日期获取 NAV 的最有效方法是什么?rorDate
ror
这在数学上微不足道,而且代码简单。我目前有一个依赖游标的简单 SQL 实现。
在第一个日期,NAV 是 @pStartingValue * ror
在随后的每个日期,它是之前计算的 nav * ror或者它是 @pStartingValue * 每个之前的 ror
您将如何仅在 MSSQL2005+ 中有效地做到这一点?
DECLARE @rorDate DATE
DECLARE @getDate CURSOR
DECLARE @lastNAV as DECIMAL(19,7)
DECLARE @datedRoR as float
DECLARE @NAVTotals TABLE
(
NAV DECIMAL(19,7),
navDate DATE
)
SET @lastNAV = 100
SET @getDate = CURSOR FOR
SELECT
p.[DATE]
FROM
performance p
ORDER BY
p.[DATE]
OPEN @getDate
FETCH NEXT
FROM @getDate INTO @rorDate
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT
@datedRoR = b.finalNetReturn
FROM
performance b
WHERE
b.date = @rorDate
INSERT INTO @NAVTotals (NAV, navDate)
VALUES (@lastNAV * (1 + @datedRoR), @rorDate)
SELECT
@lastNAV = c.NAV
FROM
@NAVTotals c
WHERE
c.navDate = @rorDate
FETCH NEXT
FROM @getDate INTO @rorDate
END
CLOSE @getDate
DEALLOCATE @getDate
select * from @NAVTotals