2017-01-10 68 views
4

次の計算に基づいて加重平均を計算しようとしています。SQL Serverで加重平均を計算する

私はこのようになりますデータセットを持っている:私は、時間差に基づいて平均値を計算する必要が

item |  Date Sent  |  Date Received 
1 |  2 Feb 10am |  3 Feb 10am 
1 |  6 Feb 11am |  6 Feb 12pm 
2 |  2 Feb 10am |  3 Feb 10am 
2 |  6 Feb 11am |  6 Feb 12pm 

は意味切り捨て:

Time Diff | Count | 
    1  | 2 | 
    12  | 2 | 

だから、だろう、この場合、次のとおりです。

1 * 2 + 12 * 2/(12 + 1) 

私はすでに集計テーブルを計算するためにSQLクエリを書いています。

select 
    floor(datediff(hh, dateSent, dateReceived)) as hrs, 
    count(item) as freq 
from 
    table 
group by 
    floor(datediff(hh, dateSent, dateReceived)) 
having 
    floor(datediff(hh, dateSent, dateReceived)) < 100 
order by 
    floor(datediff(hh, dateSent, dateReceived)) asc; 

サブクエリを行う必要がありますか?私は堪能ではなく、私は試してみましたが、構文エラーが発生し続けています。

誰かが加重平均を得るためにSQLクエリを手伝ってもらえますか?

+0

私の推測では、あなたが実際にこのような方法で、IDによってグループ化したいです。 (時間、日付、日付、受信日))<100 ORDER BY 2; 'または何かを指定している項目から、項目を選択し、hrs = AVG(DATEDIFF(HOUR、dateSent、dateReceived))、freq =そんな? – ZLK

+0

私は実際に加重平均を求めていますが、これはサブクエリの一部になると思っていましたが、それを達成することはできませんでした。なぜ2で注文したのですか? –

+0

「加重平均」とは何を意味するのかよくわかりません。どのように "重み付け"されていますか?また、「order by 2」のことは、単に「第2列による注文」と言っても、怠惰なショートハンドでした。 – ZLK

答えて

4

何が「加重平均」の意味することは、すべての時間差の平均である場合には、以下が参考になることがあります。

select AVG(a.hrs) 
from 
(
    select floor(datediff(hh,dateSent,dateReceived)) as hrs, 
    count(item) as freq from table 
     group by floor(datediff(hh,dateSent,dateReceived)) 
      having floor(datediff(hh,dateSent,dateReceived)) <100 
--    order by floor(datediff(hh,dateSent,dateReceived)) asc 
) a 
+0

はい、これは十分に感謝です!私はあなたがこれを行うことができるかはわかりませんでした。私の最終的な結果は、AVG(a.hrs)の代わりにselect sum(a.hrs * a.freq)/ sum(a.freq) –