【发布时间】:2012-05-07 17:11:13
【问题描述】:
如果不搜索同一个表至少两次以获取最大行,然后获取该行的值,我很难做到这一点。有问题的桌子很大,所以这是不可接受的。
这是我的桌子的样子:
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;
这可行,但效率很低(我必须手动过滤掉所有这些行,而我一开始就不能抓取这些行。)
我可以做些什么来获得正确的价值观?
【问题讨论】:
标签: sql oracle max greatest-n-per-group