Меню

Sql вывести вторую строку

Как в SQL получить первые (или последние) строки запроса? TOP или OFFSET?

Всем привет, сегодня мы поговорим о том, как в Microsoft SQL Server на языке T-SQL можно оставить только определенное количество первых строк результирующего набора данных. При этом мы рассмотрим два способа реализации этой простой задачи. Также я покажу Вам, как можно вывести, наоборот, только последние строки SQL запроса.

В языке T-SQL существует две стандартные возможности, которые позволяют нам применить фильтр к результирующему набору данных, иными словами, оставить в результате только определённое количество строк. Это могут быть первые строки, с учётом сортировки, что достаточно часто требуется при работе с базами данных на SQL, или последние строки, а также существует возможность вывести любой набор строк, например, пропустить первые строки и вывести определённое количество следующих строк.

Как я уже отметил, существует два способа фильтрации результирующего набора данных, первый – это использование фильтра TOP, и второй – это использование конструкции OFFSET-FETCH, которую мы подробно рассмотрели в отдельном материале — «OFFSET-FETCH в T-SQL – описание и примеры использования».

Получаем первые строки результата SQL запроса

Сейчас давайте я покажу, как можно вывести первые строки результирующего набора данных, сначала мы рассмотрим пример с использованием TOP, а затем сделаем то же самое только с помощью OFFSET-FETCH.

Но для начала давайте определимся с исходными данными, чтобы Вы понимали, какие данные у нас есть и что мы получаем в итоге.

Исходные данные для примеров

В качестве сервера у меня выступает Microsoft SQL Server 2016 Express. А теперь давайте представим, что у нас есть таблица TestTable и в ней содержатся следующие данные (перечень товаров с указанием цены).

Получаем первые строки запроса с помощью TOP

TOP – это инструкция T-SQL, с помощью которой можно ограничить число строк в результирующем наборе данных SQL запроса.

Синтаксис

TOP (Число строк) [PERCENT]

У инструкции TOP несколько параметров:

  • Число строк – сразу после ключевого слова TOP в скобочках мы указываем число, которое будет означать количество строк в итоговом результате. В инструкции SELECT допускается указание данного числа без скобочек, однако это не рекомендуется;
  • PERCENT – параметр, который говорит, что в запросе необходимо оставить не фактическое количество строк, а процент строк от общего количества, т.е. число, указанное ранее, будет означать процент, а не количество;
  • WITH TIES – параметр, который говорит, что в результирующий набор необходимо включить и записи с тем же значением, что и последняя строка, в случае наличия подобных записей. Например, если Вам нужно получить 5 самых дорогих товаров, при этом на пятом месте запись с ценой 100, а на шестом месте также цена 100, так вот, без параметра WITH TIES Вам вернётся 5 строк, а если данный параметр указать — вернется 6 строк.

Фильтр TOP обычно применяется с сортировкой данных (ORDER BY), однако это необязательно, можно применять данный фильтр и без сортировки данных, только в этом случае строки будут возвращаться в произвольном порядке (так, как они хранятся).

Пример SQL запроса с TOP – выводим первые 5 строк

Допустим, нам нужно получить 5 самых дорогих товаров, для этого пишем следующий запрос.

В данном случае мы указали сортировку по уменьшению цены (ORDER BY Price DESC), а также применили фильтр TOP (5), для ограничения вывода строк результирующего набора.

Читайте также:  Как чистить сосуды при диабете 2 типа

Пример SQL запроса с TOP и параметром WITH TIES

Сейчас давайте запустим два запроса, в обоих случаях мы будем запрашивать 4 самых дорогих товара, т.е. применим фильтр TOP (4), однако во втором запросе дополнительно мы укажем параметр WITH TIES и посмотрим на разницу итогового результата.

В итоге мы очень хорошо видим разницу, в первом случае вывелось 4 строки, а во втором 5, так как товар в 5 строке имеет точно такую же цену, как и товар в 4 строке.

Пример SQL запроса с TOP и параметром PERCENT

В этом примере давайте просто выведем 50 процентов итогового набора записей, т.е. половину. Для этого мы используем параметр PERCENT.

Так как у нас в таблице TestTable всего 8 записей, нам вывелось 4 строки, т.е. как раз 50 процентов.

Получаем первые строки запроса с помощью OFFSET-FETCH

Вторым способом получения первых строк является использование конструкции OFFSET-FETCH, однако она появилась только в 2012 версии SQL сервер, до этого, соответственно, этот способ использовать не получится.

У конструкции OFFSET-FETCH отсутствуют такие параметры, как PERCENT и WITH TIES, которые есть у фильтра TOP, однако у OFFSET-FETCH есть одно очень важное преимущество – это возможность пропускать определенное количество первых строк.

Примечание! OFFSET-FETCH — это часть конструкции ORDER BY, поэтому без сортировки использовать OFFSET-FETCH не удастся. Также не получится одновременно использовать OFFSET-FETCH и TOP в одном запросе SELECT.

Пример SQL запроса с OFFSET-FETCH — выводим первые 5 строк

Чтобы вывести первые строки с помощью конструкции OFFSET-FETCH, нам нужно в секции OFFSET указать 0, т.е. начинать вывод сразу с первой строки (если указать другое число, то именно такое количество строк будет пропущено). В секции FETCH мы соответственно указываем 5.

Результат, мы видим, точно такой же, как и в случае с TOP.

Как вывести последние строки SQL запроса?

Если Вам нужно получить не первые строки результирующего набора данных, а последние (например, последние записи в таблице), причем с той же самой сортировкой, то Вы также можете использовать два способа, т.е. и TOP, и OFFSET. В обоих случаях нам нужно будет немного усложнить запросы.

Получаем последние строки SQL запроса с помощью TOP

В случае с TOP нам дополнительно потребуется использовать конструкцию WITH (CTE – обобщенное табличное выражение), для того чтобы выполнить сортировку по идентификатору для применения фильтра TOP, т.е. отобрать самые последние записи. А после этого мы уже можем отсортировать строки так, как нам нужно.

Как видите, нам вывелись 5 последних строк.

Получаем последние строки SQL запроса с помощью OFFSET-FETCH

Для получения последних строк с помощью OFFSET-FETCH нам потребуется предварительно узнать общее количество строк, для того чтобы определить, сколько строк нужно пропустить. Это можно сделать как с помощью вложенного запроса, так и с помощью предварительного сохранения нужного нам значения в переменной. Я покажу способ с использованием переменной.

Итоговый результат такой же, как и в запросе с TOP.

Теперь Вы знаете, как с помощью TOP и OFFSET получать первые и последние строки результирующего набора данных, который возвращает SQL запрос.

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

Читайте также:  Чем можно чистить жалюзи

У меня на этом все, удачи в освоении языка T-SQL!

Источник

Выбор n-ой строки из SQL запроса

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Выбор определенного блока записей из SQL запроса
Никто не подскажет, как сделать, чтоб SELECT возвращал, скажем, с 11 по 20 записи из выполненного.

выбор строки в результате запроса
Скажите пожалуйста, создаю запрос и в нём выводится первая строка в таблице, а как мне получить.

Выбор (отметка) строки в результате запроса
Формирую отчет с помощью СКД(схемы компоновки данных) и вывожу результат отчета в поле табличного.

Чтение второй строки запроса SQL
Допустим есть запрос: SELECT * FROM Users, Part Where Users.ID = @id AND Part.uID = @id В MS SQL.

исправил сразу же

Добавлено через 2 минуты 11 секунд
там смысл такой: упорядочиваю свою выборку по убыванию и вывожу, ну 5 строку
у меня получилось громоздко

А что разве LIMIT не работает в Microsoft SQL Server?
А то думаю можно так: беСпроблем 🙂

Написание запроса на добавление строки ms sql НЕ работает
Добрый вечер, имеется такая проблема: по умолчанию столбец называется «» как присвоить ему.

Как указать строки для выполнения SQL запроса?
Как указать строки для выполнения SQL запроса НАЙТИ И ЗАМЕНИТЬ. Нужно замену выполнить не во всех.

PowerPoint: вставить строки из SQL запроса в слайд и запустить его
Спасибо БурундукЪ за https://www.cyberforum.ru/vba/thread79292.html Но то ли Office другой (2010).

Можно ли выбрать определенные строки из таблицы, которая создана на основе sql запроса?
Например, есть первоначальная таблица в которую введены какие-то даты, как varchar. Они разные.

Источник

T-SQL Как выбрать только вторую строку из таблицы?

У меня есть таблица, и мне нужно получить идентификатор второй строки. Как достичь этого?

В Top 2 я выбираю две первые строки, но мне нужна только вторая строка

В SQL Server 2012+ вы можете использовать OFFSET. FETCH:

Предполагая, что SQL Server 2005+ — пример того, как получить только вторую строку (которую, я думаю, вы можете задать), и является ли причина, по которой top не будет работать для вас?)

Используйте ROW_NUMBER() для номера строк, но используйте TOP для обработки только первых двух.

Нет необходимости в функциях номера ряда, если идентификатор поля уникален.

Я предполагаю, что вы используете SQL 2005 или выше. Вторая строка выбирает верхние 2 строки и, используя «ORDER BY ROW_COUNT DESC», вторая строка расположена как первая, затем она выбирается с помощью TOP 1

Select top 2 [id] from table Order by [id] desc должен дать вам пожелать, чтобы вы добавили последние две строки.

Однако вам нужно будет обратить особое внимание на предложение order by , так как это определит возвращаемые 1-й и 2-й строки.

Если запрос должен быть изменен следующим образом:

Select top 2 [id] from table Order by ModifiedDate desc

Вы можете получить две разные строки. Вам нужно будет решить, какой столбец использовать в вашем заказе по инструкции.

Читайте также:  Binance как вывести с пул аккаунта

Конечно, TOP будет всплывать, если вы просто хотите TOP 2, но если вам нужно их индивидуально, чтобы вы могли что-то сделать с этими значениями, используйте ROW_NUMBER, который даст вам больше контроля над строками, которые вы хотите выбрать

пс. Я сделал это, так как не уверен, что OP после простого TOP 2 в select. (Возможно, я ошибаюсь!)

Используйте TOP 2 в SELECT, чтобы получить нужное количество строк на выходе.
Это вернет в последовательности, в которой данные были созданы. Если у вас есть опция даты, которую вы можете заказать по дате вместе с TOP n Clause.

Чтобы получить верхние 2 строки;

Чтобы получить порядок верхних 2 строк по некоторому полю

Получить только 2-ю строку,

Вы можете использовать OFFSET и FETCH NEXT

НОТА:

OFFSET можно использовать только с предложением ORDER BY. Он не может быть использован сам по себе.

Значение OFFSET должно быть больше или равно нулю. Он не может быть отрицательным, иначе вернет ошибку.

Аргумент OFFSET используется для определения начальной точки для возврата строк из набора результатов. По сути, это исключает первый набор записей.

Аргумент FETCH используется для возврата набора количества строк. FETCH не может использоваться сам по себе, он используется в сочетании с OFFSET.

Источник

T-SQL как выбрать только Вторую строку из таблицы?

У меня есть таблица и мне нужно получить идентификатор второго ряда. Как этого достичь ?

By Top 2 Я выбираю две первые строки, но мне нужно только вторая строка

15 ответов

предполагая SQL Server 2005+ пример того, как получить просто второй ряд (который я думаю вы можете спросить — А почему top не будет работать для вас?)

в SQL Server 2012+ можно использовать смещение. FETCH:

использовать ROW_NUMBER() для нумерации строк, но используйте TOP обрабатывать только первые два.

нет необходимости в функциях номеров строк, если идентификатор поля уникален.

Я предполагаю, что вы используете SQL 2005 или выше. 2-я строка выбирает верхние 2 строки и, используя «ORDER BY ROW_COUNT DESC», 2-я строка располагается как первая, затем она выбирается с помощью TOP 1

Select top 2 [id] from table Order by [id] desc должен дать вам, чтобы вы добавили последние две строки.

однако вам придется обратить особое внимание на order by предложение, как это определит 1-ю и 2-ю возвращенные строки.

Если запрос должен быть такой:

Select top 2 [id] from table Order by ModifiedDate desc

вы можете получить две разные строки. Вам нужно будет решить, какой столбец использовать в вашем заказе по заявлению.

конечно, TOP будет surfice, если вы просто хотите TOP 2, но если вам нужны они индивидуально, чтобы вы могли что-то сделать с этими значениями, используйте функции row_number что даст вам больше контроля над строки, которые вы хотите выбрать

ps. Я сделал это, поскольку я не уверен, что OP после простого TOP 2 в select. (Возможно, я ошибаюсь!)

использовать TOP 2 в SELECT, чтобы получить желаемое количество строк на выходе. Это будет возвращено в последовательности, в которой были созданы данные. Если у вас есть опция даты, вы можете заказать по дате вместе с TOP n предложения.

чтобы получить верхние 2 строки;

чтобы получить порядок верхних 2 строк по некоторому полю

Источник