我有两个表,第一个表section
,架构为:
SecID | Date | SecReturn
-------|---------------|--------------
208 | 2015-04-01 | 0.00355
208 | 2015-04-02 | -0.00578
208 | 2015-04-03 | 0.00788
208 | 2015-04-04 | 0.08662
105 | 2015-04-01 | 0.00786
和第二个表SectionDates
,架构为:
SecID | MonthlyDate | DailyDate
------|---------------|-------------
208 | 2015-04-02 | 2015-04-03
105 | 2015-04-01 | 2015-04-01
我想从第二个表格中计算表格SecReturn
的{{1}}列上的正在运行的产品,其中包含日期范围( DailyDate 到 MonthlyDate ) Section
。
将根据公式计算每个 sectionID 的运行产品:
SectionDates
应用上述计算值后,将在Date | SecReturn | SectionTotal
-----------|---------------|--------------------
2015-04-01 | X (lets say) | (1+x)-1
2015-04-01 | Y | (1+x)(1+y)-1
2015-04-01 | Z | (1+x)(1+y)(1+z)-1
列中计算日期 2015-04-01 计算值将为(1 + 0.00355)-1 。同样,对于日期 2015-04-02 ,计算值将为(1 + 0.00355)(1 + -0.00578)-1 ,日期 2015-04- 03 计算值为(1 + 0.00355)(1 + -0.00578)(1 + 0.00788)-1 ,依此类推。
最终输出:
SectionTotal
答案 0 :(得分:0)
您可以尝试以下查询:
string myString = "Hello world";
string[] mySplitString = myString.Split(' ');
string[] myArray = new string[3];
var loopLength = Math.min(mySplitString.length,myArray.length);
for(int i = 0; i < loopLength; i++){
myArray[i] = mySplitString[i];
}
SQL Server 2005 AFAIK中提供的 SELECT SecID, [Date], [SecReturn],
ROUND((1 + SecReturn) * COALESCE(v,1) - 1, 5) AS SectionTotal
FROM mytable AS t1
OUTER APPLY (
SELECT EXP(SUM(LOG(SecReturn + 1))) AS v
FROM mytable AS t2
WHERE t1.SecID = t2.SecID AND t1.[Date] > t2.[Date]) AS t3
获取在运行乘法计算时要考虑的所有记录。
使用this post中的乘法聚合公式,您可以获得所需的结果。