Так уж сложилось что MSSQL не имеет своего аналога функции LIMIT в MySQL (за исключением TOP). Но достаточно часто возникает необходимость выбрать определенный интервал значений не с первого а например с 1000-го.
Существует несколько возможных вариантов:
1. Выбираем значения от первого и до последнего нужного, передаем их в скрипт и уже там обрезаем при выводе те что нам не нужны .
n — номер последнего элемента
id — уникальный идентификатор
При роботе с большими таблицами очень долго исполняется, годится только для маленьких таблиц
2. Делаем выборку с условием не вхождения по признаку
n — номер последнего элемента
m — необходимое количество элементов
id — уникальный идентификатор
Работает в некоторых случаях немного быстрее первого метода и годится для обработки достаточно больших таблиц при условии не сложного запроса
3. Наконец последний способ с использованием row_number(), наиболее быстро работающий практически с любыми таблицами
n — номер последнего элемента
m — необходимое количество элементов
id — уникальный идентификатор
Вчера был замечен небольшой парадокс выборка способом 3 работала гораздо быстрее чем просто SELECT TOP n с той-же таблицы (в которой больше 60млн. строк).
P.S. Это мой первый топик на хабре, прошу не судить строго.
Существует несколько возможных вариантов:
1. Выбираем значения от первого и до последнего нужного, передаем их в скрипт и уже там обрезаем при выводе те что нам не нужны .
SELECT TOP n * FROM TABLE ORDER BY id
n — номер последнего элемента
id — уникальный идентификатор
При роботе с большими таблицами очень долго исполняется, годится только для маленьких таблиц
2. Делаем выборку с условием не вхождения по признаку
SELECT TOP n id,* FROM TABLE
WHERE id not in (SELECT TOP (n - m) id FROM TABLE)
ORDER BY id
n — номер последнего элемента
m — необходимое количество элементов
id — уникальный идентификатор
Работает в некоторых случаях немного быстрее первого метода и годится для обработки достаточно больших таблиц при условии не сложного запроса
3. Наконец последний способ с использованием row_number(), наиболее быстро работающий практически с любыми таблицами
WITH num_row
AS
(
SELECT row_number() OVER (ORDER BY id) as nom , *
FROM TABLE
)
SELECT * FROM num_row
WHERE nom BETWEEN (n - m) AND n
n — номер последнего элемента
m — необходимое количество элементов
id — уникальный идентификатор
Вчера был замечен небольшой парадокс выборка способом 3 работала гораздо быстрее чем просто SELECT TOP n с той-же таблицы (в которой больше 60млн. строк).
P.S. Это мой первый топик на хабре, прошу не судить строго.