我对下表有要求。
条件: -
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))
请帮忙。
提前谢谢!
答案 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