Как я получаю второе по высоте значение от таблицы?
select max(val) from table where val < (select max(val) form table)
SELECT E.lastname, E.salary FROM employees E
WHERE 2 = (SELECT COUNT(*) FROM employess E2
WHERE E2.salary > E.salary)
Взято из здесь
Это работает почти во всех БД
Попробуйте это
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.
Попробуйте это
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, чтобы получить значение любой позиции
Может быть:
SELECT * FROM table ORDER BY value DESC LIMIT 1, 1
выбрать верхние 2 field_name из table_name в порядке по field_name desc limit 1
Круто, это почти как 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 var FROM table ORDER BY var DESC LIMIT 1,1
В MySQL вы можете, например, использовать 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; # Получить строки 6-15