Как имитировать SELECT ... LIMIT, OFFSET в OpenEdge SQL?

Обычно в большинстве реализаций SQL можно выбирать «скользящее окно». подмножество всех строк, возвращаемых в запросе. Обычный вариант использования для этого - нумерация страниц. Например, скажем, у меня есть страница поиска с 10 результатами на каждой странице. Для реализаций, которые поддерживаютLIMIT а такжеOFFSET ключевые слова, запрос, используемый для возврата результатов для каждой страницы, будет выглядеть следующим образом: первая страница будет использоватьSELECT ... LIMIT 10 OFFSET 0страница 2 будет использоватьSELECT ... LIMIT 10 OFFSET 10страница 3 будет использоватьSELECT ... LIMIT 10 OFFSET 20и т. д. (обратите внимание, чтоOFFSET вступает в силу доLIMIT).

Во всяком случае, я пытаюсь имитировать эту функциональность в движке SQL OpenEdge. Я уже понял, чтоSELECT TOP в основном эквивалентноLIMITОднако я не могу найти ничего похожего наOFFSET (Я не думаю, что естьexact эквивалент). SQL Server и Oracle также не хватаетOFFSET, но у них есть псевдоколонка под названиемROWCOUNT а такжеROWNUMсоответственно, это может быть использовано для имитации поведения с помощью вложенных выборок (см.Вот а такжеВот).

в10.2B SQL Reference doc, p49 есть подраздел, озаглавленныйTOP clause что говорит внизу

SELECT TOP is the functional equivalent of the Oracle ROWNUM functionality. Note that SELECT TOP is defined simply in terms of a limit on the result set size, and the optimizer determines how to use this limit for best data access. Thus, SELECT TOP does not have all the "procedural rules" used to define the meaning of the Oracle ROWNUM phrase.

Тем не менее, это представляется неточным, так как в соответствии сTOPсинтаксис не может быть использован как предикатROWNUM не могу (например, я не могу сказатьSELECT * FROM Customer WHERE TOP > 5 AND TOP < 10). ТакTOP являетсяnot функционально эквивалентноROWNUM.

Есть ли способ имитироватьOFFSETили мне не повезло?

Ответы на вопрос(1)

Ваш ответ на вопрос