我想计算一年内平均值。我有一个历史数据表,可以及时保存值的更改。 我知道如何使用每个月的(子)查询来执行此操作,但我希望在一个查询中有一种简单的方法。
示例:
ID, Value, DateUntilActivity
1, 10.00, 2014-03-01
2, 5.00, 2014-05-01
3, 3.00, 2014-07-01
4, 12.00, 2014-10-01
所以 - 这里的正确计算是:
(2x10.00 + 2x5.00 + 2x3.00 + 3x12.00 + 3x<current_value_in_a_different_table>)/12
计算包括数据活跃的飞蛾数 - 第一个值,10.00在2个月内有效 - 1月和2月。 并将值current_value_in_a_different_table视为固定值。
此外,它需要在MSSQL Server 2005上运行。
提前谢谢!
答案 0 :(得分:1)
;with cte as
(
select value, DateUntilActivity from yourtable
union
select 100 as currentvalue, '2015-1-1' from yourothertable
)
select avg(value)
from
(
select (select top 1 value from cte where DateUntilActivity>DATEADD(MONTH,number, '2014-1-1') order by DateUntilActivity ) as value
from master..spt_values
where type='p' and number <=11
) v
如果我的记忆错误并且你不能使用CTE,这相当于
select avg(value)
from
(
select
(select top 1 value
from
(
select value, DateUntilActivity from yourtable
union
select 100 as currentvalue, '2015-1-1' from yourothertable
) v
where DateUntilActivity>DATEADD(MONTH,number, '2014-1-1') order by DateUntilActivity ) as value
from master..spt_values
where type='p' and number <=11
) v