開始値と、 TSQLだけを使用して各日付でNAVを取得するための最も効率的な方法を含む@pStartingValue
テーブルを考えると、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