2013-10-21 81 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)