Oracle rownum começa em 1, então você nunca obterá o primeiro rownum se disser
between 2 and N
. É preciso uma linha para "iniciar" a sequência de pseudocoluna rownum, portanto, eliminando rownum 1 em seus critérios, você elimina todos os rownums (ou cada linha essencialmente tem rownum
0
). Olhe assim. Você não obtém um ROWNUM até que o banco de dados retorne uma linha para você. A primeira linha de qualquer critério será sempre ROWNUM 1.
Agora, o truque que você pode usar é usar uma subconsulta. Cada subconsulta terá seu próprio número de linha e, se você o alias a outro nome de coluna, poderá preservá-lo em consultas externas e tratá-lo como quiser. Portanto, se você deseja implementar a paginação de um conjunto de resultados, normalmente usaria o alias rownum de resultados internos como rownum_ para uma subconsulta externa para limitar com BETWEEN.
select * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Mas observe que o conjunto de resultados externo terá seu próprio rownum, então você pode fazer:
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Você verá
rownum
no resultado final ainda começa em 1, mas seu resultado interno terá rownum_
começando em 2.