我對下表有一個要求。根據最近的客戶端dob查找平均工資的SQL查詢
條件:
- 我得把工資客戶的平均值,如果客戶端的誕生差距串行日3天。
- 如果客戶之間的差距沒有最近3天的差距,則不需要考慮客戶之間的差距。
實例:下表中
客戶端17與1天差距具有串行DOB以前的clientid的
- >在這種情況下,我會採取工資AVG 17期以15,16 & 17薪水。
客戶18以前有clientid的WITH系列dob's - >在這種情況下,我會以18,177工資收取工資AVG 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)
下面的查詢給予一些messup結果。
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
請幫忙。
謝謝提前!
你幾乎在那裏,謝謝你的帖子。 –
@OverflowUser甚至沒有+1? – Paparazzi
如果我在答案中看到一行缺失,我會評論而不是複製粘貼。 – Paparazzi