Какой самый простой SQL-запрос для поиска второго по величине значения? - PullRequest
145 голосов
/ 28 августа 2008

Какой самый простой SQL-запрос для поиска второго по величине целочисленного значения в определенном столбце?

Возможно, в столбце есть повторяющиеся значения.

Ответы [ 46 ]

2 голосов
/ 27 июня 2012

select * from (select ROW_NUMBER() over (Order by Col_x desc) as Row, Col_1
    from table_1)as table_new tn inner join table_1 t1
    on tn.col_1 = t1.col_1
where row = 2

Надеюсь, что это поможет получить значение для любой строки .....

2 голосов
/ 23 июня 2017

Это очень простой код, вы можете попробовать это: -

например: Название таблицы = тест

salary 

1000
1500
1450
7500

MSSQL-код для получения 2-го по величине значения

select salary from test order by salary desc offset 1 rows fetch next 1 rows only;

здесь «смещение 1 строки» означает 2-ю строку таблицы, а «выборка только из 1 строки» предназначена только для отображения этой 1 строки. если вы не используете «извлечь только следующие 1 строки», тогда будут показаны все строки из второй строки.

2 голосов
/ 10 сентября 2015

Самый простой из всех

select sal from salary order by sal desc limit 1 offset 1
1 голос
/ 23 октября 2012
SELECT 
    * 
FROM 
    table 
WHERE 
    column < (SELECT max(columnq) FROM table) 
ORDER BY 
    column DESC LIMIT 1
1 голос
/ 30 марта 2012
select col_name
from (
    select dense_rank() over (order by col_name desc) as 'rank', col_name
    from table_name ) withrank 
where rank = 2
1 голос
/ 06 августа 2011
select min(sal) from emp where sal in 
    (select TOP 2 (sal) from emp order by sal desc)

Примечание

имя-саль
emp - имя таблицы

1 голос
/ 25 ноября 2010
select max(COL_NAME) from TABLE_NAME where COL_NAME in 
    (select COL_NAME from TABLE_NAME where COL_NAME < (select max(COL_NAME) from TABLE_NAME));

подзапрос возвращает все значения, кроме самого большого. выберите максимальное значение из возвращенного списка.

1 голос
/ 25 ноября 2010

Том, поверьте, это не удастся, если в разделе select max([COLUMN_NAME]) from [TABLE_NAME] возвращено более одного значения. то есть когда в наборе данных более двух значений.

Небольшая модификация вашего запроса будет работать -

select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] **IN** 
  ( select max([COLUMN_NAME]) from [TABLE_NAME] )
1 голос
/ 12 июля 2017

MSSQL

SELECT  *
  FROM [Users]
    order by UserId desc OFFSET 1 ROW 
FETCH NEXT 1 ROW ONLY;

MySQL

SELECT  *
  FROM Users
    order by UserId desc LIMIT 1 OFFSET 1

Нет необходимости в подзапросах ... просто пропустите одну строку и выберите вторые строки после заказа по убыванию

1 голос
/ 10 марта 2017
SELECT MAX(sal) FROM emp
WHERE sal NOT IN (SELECT top 3 sal FROM emp order by sal desc )

это вернет третий по величине саль таблицы emp

...