SQL Query用于提取客户端1天差距的平均值

时间:2012-08-22 14:13:23

标签: sql sql-server sql-server-2008

我对下表有要求。

条件: -
1 GT;我必须采取平均生育日期差距的平均薪水 2 - ;如果客户之间的差距最近没有1天dob的差距,那么就不需要考虑该客户。

请查看结果。

表:

ClientID    ClinetDOB's         Slaries
1           2012-03-14              300  
2           2012-04-11              400  
3           2012-05-09              200  
4           2012-06-06              400  
5           2012-07-30              600  
6           2012-08-14              1200  
7           2012-08-15              1800  
8           2012-08-17              1200  
9           2012-08-20              2400  
10          2012-08-21              1500  

结果应该看起来像这样: -

ClientID    ClinetDOB's         AVG(Slaries)
7           2012-08-15              1500        --This avg of 1200,1800(because clientID's 6,7 have dob's have 1day gap)    
10          2012-08-20              1950        --This avg of 2400,1500(because clientID's 9,10 have dob's have 1day gap))

请帮忙。

提前谢谢!

1 个答案:

答案 0 :(得分:3)

自联接会将当前记录与所有具有昨天日期的记录连接起来。在此上下文中,group by允许计算具有相同日期的许多记录。 t1需要单独计算,因此之后会添加薪水,而计数(*)会增加以计算平均值。

Here is Sql Fiddle with example

select t1.ClientID, 
       t1.ClinetDOBs,
       (t1.Slaries + sum (t2.Slaries)) / (count (*) + 1) Avg_Slaries
  from table1 t1
 inner join table1 t2
    on t1.ClinetDOBs = dateadd(day, 1, t2.ClinetDOBs)
 group by t1.ClientID, 
       t1.ClinetDOBs,
       t1.Slaries