How to get second largest or third largest entry from a table [duplicate]

SELECT *
FROM (
  SELECT some_column, 
         row_number() over (order by your_sort_column desc) as row_num
  FROM some_table
) t
WHERE row_num = 3


If you expect more than one row to have the same value in your_sort_column you can also use the rank() function

SELECT *
FROM (
  SELECT some_column, 
         rank() over (order by your_sort_column desc) as row_rank
  FROM some_table
) t
WHERE row_rank = 3
This migh return more than one row..

You can find the Nth largest value of a column by using the following query

SELECT * 
FROM TableName a 
WHERE n = (
           SELECT count( DISTINCT (b.ColumnName) )
           FROM TableName b 
           WHERE a.ColumnName <= b.ColumnName 
          );

I think the below query will work to find the second highest record with NOT IN.

SELECT MAX( userId )
FROM table 
WHERE userId NOT IN ( 
                      SELECT MAX( userId )
                      FROM table
                    ); 

simple and useful...


To get second largest salary use this:

select salary from 
  (select s2.salary,rownum rm from
     (select distinct salary from employees order by salary desc)
  s2 where rownum<=2)
where rm >= 2

It works for second highest salary,

$query = "SELECT * FROM `table_name` ORDER BY field_name` DESC LIMIT 1 , 1 ";