시작 값 @pStartingValue
과 rorDate
및 ror
이 포함 된 테이블을 보면 TSQL을 사용하여 각 날짜에 NAV를 얻는 가장 효율적인 방법은 무엇입니까?SQL의 순자산 가치로 수익률을 롤업하려면 어떻게해야합니까?
이 수학적으로 사소하고 간단한 코드입니다. 커서에 의존하는 순진한 SQL 구현이 현재 있습니다. 첫 데이트에
는 NAV는 이전에 계산 된 탐색 *의 ROR 또는 그것의 @pStartingValue * 모든 이전 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
커서 접근 방식을 사용하면 예상 출력과 일치하는 결과를 얻을 수 있습니다. – RThomas
@RThomas 커서 구현을 추가했습니다 – Matthew