Аналитическое решение только с одним вложенным запросом:
SELECT * FROM
(
SELECT t.*, Row_Number() OVER (ORDER BY name) MyRow FROM sometable t
)
WHERE MyRow BETWEEN 10 AND 20;
Rank()
мог быть заменен Row_Number()
, но мог бы возвратить больше записей, чем Вы ожидаете, существуют ли дублирующиеся значения для имени.
Хороший вопрос!
Думаю, причина в том, что вы не хотите использовать круговые привязки, такие как {? X =? Y,? Y = ? x}
. В частности, объединение (? X? Y)
с (? Y? X)
даст вам круглую рамку выше, если вы пропустите проверку. С проверкой вы получите фрейм {? X =? Y}, как и ожидалось.
Круговые привязки в фрейме плохи, потому что они могут вызвать функции, выполняющие подстановки с использованием фрейма, такие как instantiate
, для запуска в бесконечном цикле.
Без него вы бы не получили самый общий объединитель . Еще предстоит поработать: объединить x и y.