0

以下の表の要件があります。

条件:
1>私は1日の生年月日ギャップがある給与クリントの平均を取る必要があります。
2>クライアント間のギャップの間に最も近い1日のドブのギャップがない場合、そのクライアントを考慮する必要はありません。

結果をご覧ください。

テーブル:

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個別に会計処理する必要があるため、後で給与が追加され、count(*)が増分されて平均が計算されます。

これが例のSQLフィドルです

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 に答える