Tsql在一个查询中获取多行的依赖数据

时间:2014-05-20 13:37:42

标签: sql-server tsql sql-server-2005

我想计算一年内平均值。我有一个历史数据表,可以及时保存值的更改。 我知道如何使用每个月的(子)查询来执行此操作,但我希望在一个查询中有一种简单的方法。

示例:

   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上运行。

提前谢谢!

1 个答案:

答案 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