That's quite possible.
Suppose your table structure is as follows:
CREATE TABLE [dbo].[Ratings]( [Evaluator] varchar(10), [Evaluatee] varchar(10), [Rating] int, [Date] datetime );
and values ββlike this:
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'
Then the average rating for Person 1 is:
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)
Result:
4
Or for all Evaluatee grouped by 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
Result:
Person 1 4 Person 2 2
It may seem that he has an implicit assumption that no records exist with the same date; but this is actually not a problem: if such records can exist, then you cannot decide which one was made later; You can only choose randomly between them. As shown here, they are both included and averaged - this may be the best solution you can get for this borderline case (although it contributes a bit to this person by giving him two votes).
To avoid this problem altogether, you can simply make Date part of the primary key or a unique index - the columns (Evaluator, Evaluatee, Date) are the obvious choice for the primary key.