从表中检索第二高的值

时间:2010-06-15 08:30:03

标签: sql tsql

如何从表中检索第二高值?

10 个答案:

答案 0 :(得分:11)

select max(val) from table where val < (select max(val) form table) 

答案 1 :(得分:6)

在MySQL中你可以使用LIMIT 1, 1

SELECT col FROM tbl ORDER BY col DESC LIMIT 1, 1

请参阅MySQL reference manual: SELECT Syntax)。

  

LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT需要一个或两个数字参数,它们都必须是非负整数常量(使用预准备语句时除外)。

     

使用两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量为0(不是1):

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

答案 2 :(得分:5)

从table_name order by field_name desc limit 1

中选择top 2 field_name

答案 3 :(得分:2)

SELECT E.lastname, E.salary FROM employees E
WHERE 2 = (SELECT COUNT(*) FROM employess E2
            WHERE E2.salary > E.salary)

取自here
这几乎适用于所有Dbs

答案 4 :(得分:2)

Select Top 1 sq.ColumnToSelect
From
(Select Top 2 ColumnToSelect
From MyTable
Order by ColumnToSelect Desc
)sq
Order by sq.ColumnToSelect asc

答案 5 :(得分:2)

很酷,这几乎就像Code Golf。

Microsoft SQL Server 2005及更高版本:

SELECT *
FROM (
    SELECT 
        *,
        row_number() OVER (ORDER BY var DESC) AS ranking
    FROM table
) AS q
WHERE ranking = 2

答案 6 :(得分:2)

试试这个

SELECT * FROM 
(SELECT empno, deptno, sal,
DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC NULLS LAST) DENSE_RANK
FROM emp)
WHERE DENSE_RANK = 2;

这适用于Oracle和SQL Server。

答案 7 :(得分:1)

也许:

SELECT * FROM table ORDER BY value DESC LIMIT 1, 1

答案 8 :(得分:1)

试试这个

SELECT TOP 1 Column FROM Table WHERE Column < (SELECT MAX(Column) FROM Table) 
ORDER BY Column DESC

SELECT TOP 1 Column FROM (SELECT TOP <n> Column FROM Table ORDER BY Column DESC) 

ORDER BY ASC

更改n以获取任何位置的值

答案 9 :(得分:0)

一个解决方案就是这样:

SELECT var FROM table ORDER BY var DESC LIMIT 1,1