在排名()之后仅选择3个最佳排名

时间:2015-05-29 14:42:07

标签: sql database oracle select

我想为每个分区选择rank()函数的3个最佳结果

例如,在此查询中:

SELECT id, rank() over (PARTITION BY year order by ...) as rank
FROM table1
GROUP BY year

我希望每年排名3位。

我可以通过创建一个新的来管理它:

Select *
from ...
where rank <= 3

但如果我有一些平等,我每年会得到超过3行。

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

我们没有太多关于您的表格和查询结构的信息,但作为一般解决方案,我建议添加row_number() over (ORDER BY ... desc) as rn并使用where rn = 1进行过滤,例如here