2013-10-21 54 views
1

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

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

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

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

+0

尝试使用LIMIT子句 – opalenzuela

+0

LIMIT子句只能从Oracle @opalenzuela的12c起。 – Ben

回答

1

这将为甲骨文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 

130000薪水并列第五位,因此前六的薪水都会有一个排名< = 5

如果要包括13万倍的工资之一(这意味着你总是想要排除五个且只有五个薪水),请将查询中的RANK(Salary)替换为ROW_NUMBER(Salary)