我有下表:
Interest Rate ID Interest Rate Interest Rate Start Date
20 3.5 2009-12-02 00:00:00.000
21 3.75 2010-03-03 00:00:00.000
22 4 2010-04-07 00:00:00.000
23 4.25 2010-05-05 00:00:00.000
24 4.5 2010-11-03 00:00:00.000
25 4.25 2011-11-02 00:00:00.000
正如您可以看到Interest Rate
跨越一个月到下一个月。我需要计算整个月的平均利息。
我们假设选择2010-11
。 01/11/2010
02/11/2010
的{{1}}利率为4.25
,如行23
所示,但从03/11/2010
起,其费率为4.5
%。如何编写使用月份和年份来查找平均利率的SQL查询(使用TSQL)?
由于
答案 0 :(得分:1)
这是一种痛苦,所以我希望没有一个错误的错误:
select sum(((case when end_date > lastdt then lastdt else end_date end) -
(case when start_date < firstdt then firstdt else start_date end)
)* t.rate) /
sum((case when end_date > lastdt then lastdt else end_date end) -
(case when start_date < firstdt then firstdt else start_date end)
)
from (select t.*,
(select top 1 start_date - 1 from t t2 where t2.start_date > t.start_date order by t2.start_date
) as end_date
from t
) t cross join
(select cast('2011-11-01' as date) as firstdt, cast(2011-11-30) as lastdt
where firstdt <= t.end_date and lastdt >= t.start_date
这个想法是计算每个利率有效的天数。然后,平均值是速率除以天数的天数之和。
这有点复杂。内部查询为每条记录输入结束日期。 where
子句只选择重叠的子句。 select
计算了加权平均值。