我很難做到這一點,無需搜索同一張表至少兩次以獲取最大行,然後獲取該行的值。有問題的桌子很大,所以這是不可接受的。返回行,每個組的最大值爲一列
這裏是我的表可能是什麼樣子:
SCORES
ID ROUND SCORE
1 1 3
1 2 6
1 3 2
2 1 10
2 2 12
3 1 6
我需要返回每個ID在最近一輪拿到了分數。也就是說,最大(圓)行,但不是最大分數。
OUTPUT:
ID ROUND SCORE
1 3 2
2 2 12
3 1 6
現在我得:
SELECT * FROM
(SELECT id, round,
CASE WHEN (MAX(round) OVER (PARTITION BY id)) = round THEN score ELSE NULL END score
FROM
SCORES
where id in (1,2,3)
) scorevals
WHERE
scorevals.round is not null;
這工作,但很低效的(我必須手動篩選出所有這些行,當我應該能不能搶在那些行第一名)
我能做些什麼來獲得正確的值?
我喜歡它;很乾淨。 – Jeremy 2012-04-27 20:28:11