如何从表中检索第二高值?
答案 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