Перейти к основному содержанию
OFFSET и FETCH позволяют получать данные порциями. Они задают блок строк, который нужно получить одним запросом.
-- Стиль стандарта SQL:
[OFFSET offset_row_count {ROW | ROWS}] [FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}]

-- Стиль MySQL/PostgreSQL:
[LIMIT [n, ]m] [OFFSET offset_row_count]
Значение offset_row_count или fetch_row_count может быть числом или литеральной константой. fetch_row_count можно опустить; по умолчанию оно равно 1. OFFSET задает количество строк, которые нужно пропустить перед тем, как начать возвращать строки из результирующего набора запроса. OFFSET n пропускает первые n строк результата. Поддерживается и отрицательный OFFSET: OFFSET -n пропускает последние n строк результата. Также поддерживается дробный OFFSET: OFFSET n — если 0 < n < 1, то пропускаются первые n * 100% результата. Пример: • OFFSET 0.1 - пропускает первые 10% результата.
Примечание • Дробное значение должно быть числом Float64, меньшим 1 и больше нуля. • Если в результате вычисления получается дробное число строк, оно округляется вверх до следующего целого числа.
FETCH задает максимальное количество строк, которое может содержаться в результате запроса. Параметр ONLY используется для возврата строк, которые идут сразу после строк, пропущенных OFFSET. В этом случае FETCH служит альтернативой выражению LIMIT. Например, следующий запрос
SELECT * FROM test_fetch ORDER BY a OFFSET 1 ROW FETCH FIRST 3 ROWS ONLY;
совпадает с запросом
SELECT * FROM test_fetch ORDER BY a LIMIT 3 OFFSET 1;
Опция WITH TIES используется для возврата всех дополнительных строк, которые делят последнее место в результирующем наборе согласно предложению ORDER BY. Например, если fetch_row_count равно 5, но ещё две строки имеют те же значения в столбцах ORDER BY, что и пятая строка, результирующий набор будет содержать семь строк.
Согласно стандарту, предложение OFFSET должно идти перед предложением FETCH, если присутствуют оба.
Фактическое смещение также может зависеть от настройки offset.

Примеры

Исходная таблица:
┌─a─┬─b─┐
│ 1 │ 1 │
│ 2 │ 1 │
│ 3 │ 4 │
│ 1 │ 3 │
│ 5 │ 4 │
│ 0 │ 6 │
│ 5 │ 7 │
└───┴───┘
Использование параметра ONLY:
Query
SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROW FETCH FIRST 3 ROWS ONLY;
Response
┌─a─┬─b─┐
│ 2 │ 1 │
│ 3 │ 4 │
│ 5 │ 4 │
└───┴───┘
Использование опции WITH TIES:
Query
SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROW FETCH FIRST 3 ROWS WITH TIES;
Response
┌─a─┬─b─┐
│ 2 │ 1 │
│ 3 │ 4 │
│ 5 │ 4 │
│ 5 │ 7 │
└───┴───┘
Последнее изменение 10 июня 2026 г.