我有一个下表的要求。
条件:
- 如果客户有连续3天的出生日期差距,我必须取客户的平均工资。
- 如果客户之间的差距没有最近的 3 天出生日期差距,则无需考虑该客户。
示例:
在下表中,
客户端 17 具有以前的客户端 ID 的 WITH 串行 dob,间隔为 1 天 -> 在这种情况下,我将通过 15,16 和 17 的薪水获得 17 的平均工资。
客户 18 有以前的客户 ID,带有连续的出生日期 -> 在这种情况下,我将通过 16,17 和 18 的工资获得 18 的平均工资。
桌子:
JobType ClientID ClinetDOB's Slaries
.net 1 2012-03-14 300
.net 2 2012-04-11 400
.net 3 2012-04-12 200
.net 4 2012-07-29 400
.net 5 2012-08-17 1200
.net 6 2012-08-18 1400
.net 7 2012-08-19 1400
java 8 2012-04-10 400
java 9 2012-07-29 400
java 10 2012-07-30 600
java 11 2012-08-14 1200
java 12 2012-08-15 1800
java 13 2012-08-16 1100
java 14 2012-09-17 1200
java 15 2012-08-18 2400
java 16 2012-08-19 2400
java 17 2012-08-20 2400
java 18 2012-08-21 1500
结果应该看起来像这样:-
JobType ClientID ClinetDOB's AVG(Slaries)
.net 7 2012-08-19 1333
Java 13 2012-08-16 1366 --This avg of 5,6,7 clientsId's(because they have serial 3days dob's)
Java 17 2012-08-20 2400 --This avg of 15,16,17 clientsId's(because they have serial 3days dob's)
Java 18 2012-08-21 2100 --This avg of 16,17,18 clientsId's(because they have serial 3days dob's)
下面的查询给出了一些混乱的结果。
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, 3, t2.ClinetDOBs) and t1.jobtype = t2.jobtype)
group by t1.ClientID,
t1.ClinetDOBs,
t1.Slaries
请帮忙。
先感谢您!