0

我有一个下表的要求。

条件:-
1> 我必须采取平均工资克林茨,谁有 1 天的出生日期差距。
2> 如果客户之间的差距没有最近的 1day 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))

请帮忙。

先感谢您!

4

1 回答 1

3

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

这是带有示例的 Sql Fiddle

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
于 2012-08-22T14:57:12.090 回答