甲骨文:获得第10个记录

时间:2013-10-21 12:56:18

标签: sql oracle

我想从5个成员组中的表中获取数据。我如何获得第n条记录(第n组)。我的意思是(n-1)* 5和(n)* 5之间的记录。

我不喜欢在下面的表单中找到我的记录,因为每次它在我的机器上运行2个查询。

SELECT MAX(Salary) as 'Salary' from EmployeeDetails
where Salary NOT IN
(
SELECT TOP n-1 (SALARY) from EmployeeDetails ORDER BY Salary Desc
)

注意:我是Oracle的新手,只是要求你给我一个提示,而不是要求完整的代码。

1 个答案:

答案 0 :(得分:1)

这适用于Oracle 11(以及10和我认为甚至9):

SELECT MAX(Salary) AS MaxSal
FROM (
  SELECT
    Salary,
    RANK(Salary) OVER (ORDER BY Salary DESC) AS SalRank
  FROM EmployeeDetails
)
WHERE SalRank > 5

请注意,如果第五名有平局,则此查询将省略前六名或更多薪水。例如:

Salary SalRank
------ -------
150000       1
145000       2
140000       3
135000       4
130000       5
130000       5
125000       7

130,000的薪水与第五名并列,因此前六名薪水的排名<= 5。

如果您想要包含130,000个工资中的一个(意味着您总是想要排除五个且只有五个工资),请将查询中的RANK(Salary)替换为ROW_NUMBER(Salary)