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

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

В столбце могут быть 9X_sql-syntax повторяющиеся значения.

199
0
26
Общее количество ответов: 26

Ответ #1

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

SELECT MAX( col )
  FROM table
 WHERE col < ( SELECT MAX( col )
                 FROM table )

9X_sql-statement

360
2

  • спасибо, использовал это, чтобы найти вторую последнюю дату [здесь] (http://stackoverflow.com/questions/8590296/sql-returning-second-newest-record/2 ...

Ответ #2

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

SELECT MAX(col) FROM table WHERE col NOT IN (SELECT MAX(col) FROM table);

9X_sql-query

64
0

Ответ #3

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

В T-Sql есть два пути:

--filter out the max
select max( col )
from [table]
where col < ( 
    select max( col )
    from [table] )

--sort top two then bottom one
select top 1 col 
from (
    select top 2 col 
    from [table]
    order by col) topTwo
order by col desc 

В Microsoft SQL первый 9X_sql способ в два раза быстрее второго, даже 9X_puzzle если рассматриваемый столбец кластеризован.

Это 9X_sql-syntax связано с тем, что операция сортировки выполняется 9X_sql-select относительно медленно по сравнению со сканированием 9X_sql таблицы или индекса, которые использует 9X_puzzle агрегация max.

Кроме того, в Microsoft SQL 2005 9X_sql и выше вы можете использовать функцию ROW_NUMBER():

select col
from (
    select ROW_NUMBER() over (order by col asc) as 'rowNum', col
    from [table] ) withRowNum 
where rowNum = 2

32
0

Ответ #4

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

Я вижу здесь некоторые решения, специфичные 9X_sql-statement для SQL Server, и некоторые решения, специфичные 9X_puzzle для MySQL, поэтому вы можете уточнить, какая 9X_select-statement база данных вам нужна. Хотя, если бы мне 9X_sql-syntax пришлось угадывать, я бы сказал, что это 9X_sql-select SQL Server, поскольку в MySQL это тривиально.

Я 9X_select-statement также вижу некоторые решения, которые не 9X_sql-select будут работать, потому что они не учитывают 9X_sql-syntax возможность дублирования, поэтому будьте 9X_sql-statement осторожны, какие из них вы принимаете. Наконец, я 9X_sql-select вижу несколько, которые будут работать, но 9X_sql для этого потребуется два полных сканирования 9X_sql-query таблицы. Вы хотите убедиться, что второе 9X_sql сканирование просматривает только 2 значения.

SQL 9X_sql-syntax Server (до 2012 г.):

SELECT MIN([column]) AS [column]
FROM (
    SELECT TOP 2 [column] 
    FROM [Table] 
    GROUP BY [column] 
    ORDER BY [column] DESC
) a

MySQL:

SELECT `column` 
FROM `table` 
GROUP BY `column` 
ORDER BY `column` DESC 
LIMIT 1,1

Обновление:

SQL Server 2012 9X_sql-select теперь поддерживает гораздо более чистый 9X_sqlselectstandard) синтаксис OFFSET/FETCH:

SELECT [column] 
FROM [Table] 
GROUP BY [column] 
ORDER BY [column] DESC
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;

27
2

  • @PankajSharma нет, это все равно будет ра ...

Ответ #5

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

Я полагаю, вы можете сделать что-то вроде:

SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT 1 OFFSET 1

или

SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT (1, 1)

в 9X_sql-select зависимости от вашего сервера базы данных. Подсказка: SQL 9X_select-statement Server не выполняет LIMIT.

19
0

Ответ #6

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

Проще всего было бы получить второе значение 9X_sql-query из этого набора результатов в приложении:

SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2

Но 9X_sql если вы должны выбрать второе значение с 9X_sql-syntax помощью SQL, как насчет:

SELECT MIN(value) FROM (SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2) AS t

7
2

  • Вы запускали это ...

Ответ #7

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

Очень простой запрос для поиска второго 9X_sql по величине значения

SELECT `Column` FROM `Table` ORDER BY `Column` DESC LIMIT 1,1;

6
0

Ответ #8

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

вы можете найти второе по величине значение 9X_sql-query столбца, используя следующий запрос

SELECT *
FROM TableName a
WHERE
  2 = (SELECT count(DISTINCT(b.ColumnName))
       FROM TableName b WHERE
       a.ColumnName <= b.ColumnName);

Вы можете 9X_sql найти более подробную информацию по следующей 9X_select-statement ссылке

http://www.abhishekbpatel.com/2012/12/how-to-get-nth-maximum-and-minimun.html

6
0

Ответ #9

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

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

Нет необходимости в подзапросах ... просто 9X_sql-syntax пропустите одну строку и выберите вторую 9X_puzzle строку после порядка по убыванию

6
0

Ответ #10

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

SELECT MAX(Salary) FROM Employee WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )

Этот запрос вернет максимальную зарплату 9X_sql-select из результата, который не содержит максимальную 9X_sql-statement зарплату из общей таблицы.

4
1

  • Можете ли вы [отредактировать], чтобы объяснить, чем это значительно отличается от стар ...

Ответ #11

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

Самый простой

select sal from salary order by sal desc limit 1 offset 1

9X_sql

3
0

Ответ #12

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

Старый вопрос, который я знаю, но он дал 9X_sql-query мне лучший план выполнения:

 SELECT TOP 1 LEAD(MAX (column)) OVER (ORDER BY column desc)
 FROM TABLE 
 GROUP BY column

3
0

Ответ #13

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

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

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

salary 

1000
1500
1450
7500

Код 9X_sql-select MSSQL для получения второго по величине 9X_sql-statement значения

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

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

3
0

Ответ #14

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


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

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

2
0

Ответ #15

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

Воспользуйтесь этим запросом.

SELECT MAX( colname ) 
FROM Tablename 
where colname < (
    SELECT MAX( colname ) 
    FROM Tablename)

9X_puzzle

2
1

  • Этот ответ идентичен ответу @Matt Rogish, который был опубликован 6 лет назад ...

Ответ #16

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

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

Небольшое 9X_sql-syntax изменение вашего запроса подойдет -

select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] **IN** 
  ( select max([COLUMN_NAME]) from [TABLE_NAME] )

1
0

Ответ #17

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

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));

Подзапрос

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

1
0

Ответ #18

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

select min(sal) from emp where sal in 
    (select TOP 2 (sal) from emp order by sal desc)

Примечание

sal - это имя столбца
emp - имя 9X_sql-syntax таблицы

1
0

Ответ #19

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

select col_name
from (
    select dense_rank() over (order by col_name desc) as 'rank', col_name
    from table_name ) withrank 
where rank = 2

9X_sql-query

1
0

Ответ #20

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

SELECT 
    * 
FROM 
    table 
WHERE 
    column < (SELECT max(columnq) FROM table) 
ORDER BY 
    column DESC LIMIT 1

9X_sql-syntax

1
0

Ответ #21

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

Это еще один способ найти второе по величине 9X_puzzle значение столбца. Рассмотрим таблицу "Студент" и 9X_sql-syntax столбец "Возраст". Тогда запрос будет:

select top 1 Age from Student where Age in(select distinct top 2 Age  from Student order by Age desc) order by Age asc

1
0

Ответ #22

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

Самый простой способ:

SELECT
      Column name
FROM
      Table name 
ORDER BY 
      Column name DESC
LIMIT 1,1

9X_puzzle

1
0

Ответ #23

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

select age from student group by id having age<(select max(age) from student)order by age limit 1

9X_puzzle

1
0

Ответ #24

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

Как вы упомянули, повторяющиеся значения. В 9X_sql-syntax таком случае вы можете использовать DISTINCT и GROUP BY, чтобы 9X_sql-syntax найти второе по величине значение

Вот таблица

зарплата

:

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

ГРУППА ПО

SELECT  amount FROM  salary 
GROUP by amount
ORDER BY  amount DESC 
LIMIT 1 , 1

ОТЛИЧИТЕЛЬНО

SELECT DISTINCT amount
FROM  salary 
ORDER BY  amount DESC 
LIMIT 1 , 1

Первая 9X_sql-query часть LIMIT = начальный индекс

Вторая часть 9X_puzzle LIMIT = сколько значений

1
0

Ответ #25

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

SELECT MAX(sal) FROM emp
WHERE sal NOT IN (SELECT top 3 sal FROM emp order by sal desc )

это вернет третью по величине sal таблицы 9X_sql-query emp

1
0

Ответ #26

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

select max(column_name) from table_name
where column_name not in (select max(column_name) from table_name);

не в - это условие, исключающее наивысшее значение 9X_sqlselect column_name.

Ссылка: programmer interview

1
0