これは完全に可能です。
のは、あなたのテーブルの構造は次のようになりますと仮定しましょう:次に者1の平均評価はあり
INSERT INTO Ratings
SELECT 'Person 1', 'Person 2', 5, '2011-02-01' UNION
SELECT 'Person 1', 'Person 2', 2, '2011-03-01' UNION
SELECT 'Person 2', 'Person 1', 6, '2011-02-01' UNION
SELECT 'Person 2', 'Person 1', 3, '2011-03-01' UNION
SELECT 'Person 3', 'Person 1', 5, '2011-05-01'
:
SELECT AVG(Rating) FROM Ratings r1
WHERE Evaluatee='Person 1' and not exists
(SELECT 1 FROM Ratings r2
WHERE r1.Evaluatee = r2.Evaluatee AND
r1.evaluator=r2.evaluator AND
r1.date < r2.date)
結果
CREATE TABLE [dbo].[Ratings](
[Evaluator] varchar(10),
[Evaluatee] varchar(10),
[Rating] int,
[Date] datetime
);
と、このような値:
4
またはすべてEvaluateeによってグループ化Evaluateeの、のために:
SELECT Evaluatee, AVG(Rating) FROM Ratings r1
WHERE not exists
(SELECT 1 FROM Ratings r2
WHERE r1.Evaluatee = r2.Evaluatee AND
r1.evaluator = r2.evaluator AND
r1.date < r2.date)
GROUP BY Evaluatee
結果:
Person 1 4
Person 2 2
それはエントリが同じ日付に存在しないことを暗黙の前提を持っているようにこれが見えるかもしれません。 しかし、それは実際問題ではありません。そのようなエントリが存在する可能性がある場合は、後で作成されたエントリを後で決定することはできません。あなたはそれらの間でランダムにしか選択できませんでした。ここに示されているように、それらは両方とも含まれ、平均化されています - あなたがその国境の場合に得られる最良の解決策かもしれません。
この問題を回避するには、主キーまたは一意のインデックスの日付部分を作成するだけで済みます。ここでの主キーの選択は、列(Evaluator、Evaluatee、Date)です。
があなたのテーブルにも代理合成プライマリキーを持っていますか?オートインクリメントID整数、おそらく?クエリがより簡単になり、パフォーマンスが向上する場合は、パフォーマンスが向上します。 –
どのバージョンのSQL Serverですか? – AakashM