以下の表の要件があります。
条件:
- クライアントの生年月日が3日間連続している場合は、給与クライアントの平均をとる必要があります。
- クライアント間のギャップの間に最も近い3日間のドブのギャップがない場合は、そのクライアントを考慮する必要はありません。
例:
以下の表で、
クライアント17には以前のclientidのWITHシリアルdobがあり、1日ギャップがあります->この場合、15、16、および17の給与を取得して17の給与AVGを取得します。
クライアント18には、以前のclientidのWITHシリアルdobがあります->この場合、16、17、および18の給与を受け取ることにより、18の給与AVGを取得します。
テーブル:
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
助けてください。
前もって感謝します!