Как мне извлечь второе по величине значение из таблицы?
select max(val) from table where val < (select max(val) form table)
В MySQL вы можете, например, использовать LIMIT 1, 1:
LIMIT 1, 1
SELECT col FROM tbl ORDER BY col DESC LIMIT 1, 1
См. Справочное руководство MySQL: SELECT Syntax ).
Предложение LIMIT может использоваться для ограничения количества строк, возвращаемых оператором SELECT. LIMIT принимает один или два числовых аргумента, которые оба должны быть неотрицательными целочисленными константами (кроме случаев использования подготовленных операторов). С двумя аргументами первый аргумент задает смещение первой строки, которую нужно вернуть, а второй - максимальное количество строк, которые нужно вернуть. Смещение начальной строки равно 0 (не 1): SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
Предложение LIMIT может использоваться для ограничения количества строк, возвращаемых оператором SELECT. LIMIT принимает один или два числовых аргумента, которые оба должны быть неотрицательными целочисленными константами (кроме случаев использования подготовленных операторов).
С двумя аргументами первый аргумент задает смещение первой строки, которую нужно вернуть, а второй - максимальное количество строк, которые нужно вернуть. Смещение начальной строки равно 0 (не 1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
выберите верхние 2 field_name из таблицы table_name упорядочены по field_name desc limit 1
Попробуйте это
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.
Круто, это почти как 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
Select Top 1 sq.ColumnToSelect From (Select Top 2 ColumnToSelect From MyTable Order by ColumnToSelect Desc )sq Order by sq.ColumnToSelect asc
SELECT E.lastname, E.salary FROM employees E WHERE 2 = (SELECT COUNT(*) FROM employess E2 WHERE E2.salary > E.salary)
Взято из здесь Это работает почти во всех DBS
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)
ЗАКАЗАТЬ ПО АСК
измените n, чтобы получить значение любой позиции
Может быть:
SELECT * FROM table ORDER BY value DESC LIMIT 1, 1
одно решение будет выглядеть так:
SELECT var FROM table ORDER BY var DESC LIMIT 1,1