完全有可能。
讓我們假設你的表結構是這樣的:
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'
然後平均得分爲的人1:
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
或所有被評的,由被評分組:
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)。
請問您的表還擁有代理合成主鍵?一個自動遞增的身份整數,也許?如果這樣的話,它會使查詢更容易,更高效。 – 2011-12-16 11:13:14
哪個版本的SQL Server? – AakashM 2011-12-16 11:39:30