Click here to Skip to main content
15,891,633 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I want a SQL/PLSQL query to find the third highest value for a field (EX:Salary) from my table.
Posted
Updated 7-Jan-13 1:15am
v2

 
Share this answer
 
v2
Comments
Maciej Los 8-Jan-13 13:36pm    
Good links, my 5!
You need to use one of the ranking functions[^].

For example, you can use ROW_NUMBER(). Try this:
SQL
DECLARE @myTable TABLE (aValue INT)

INSERT INTO @myTable (aValue)
VALUES(123)
INSERT INTO @myTable (aValue)
VALUES(456)
INSERT INTO @myTable (aValue)
VALUES(789)
INSERT INTO @myTable (aValue)
VALUES(234)
INSERT INTO @myTable (aValue)
VALUES(567)
INSERT INTO @myTable (aValue)
VALUES(345)
INSERT INTO @myTable (aValue)
VALUES(678)
INSERT INTO @myTable (aValue)
VALUES(999)

--view all records
SELECT ROW_NUMBER() OVER(ORDER BY aValue DESC) AS aPosition, aValue
FROM @myTable

Results:
1	999
2	789
3	678
4	567
5	456
6	345
7	234
8	123

SQL
--view only the third highest value
SELECT aValue As [ThirdHighestValue]
FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY aValue DESC) AS aPosition, aValue
    FROM @myTable
) AS t1
WHERE t1.aPosition = 3


Result: 678
 
Share this answer
 
v2
Try
SQL
SELECT a.Salary FROM MyTable a
WHERE 3 = (SELECT COUNT(DISTINCT (b.Salary)) FROM MyTable b WHERE a.Salary <= b.Salary)
 
Share this answer
 
Comments
Maciej Los 8-Jan-13 13:36pm    
Good work, my 5!
__TR__ 9-Jan-13 1:10am    
Thank you.
SQL
SELECT TOP 1 salary
FROM (
SELECT DISTINCT TOP 3 salary
FROM employee
ORDER BY salary DESC) a
ORDER BY salary
 
Share this answer
 
v2
Comments
Maciej Los 8-Jan-13 13:36pm    
Good answer, my 5!

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900