Вы можете использовать analyti c функцию , такую как dense_rank()
в подзапросе, чтобы ранжировать идентификаторы, а затем отфильтровать по разрядам, которые вы хотите, например:
select id, col1, col2
from (
select id, col1, col2, dense_rank() over (order by id) as rnk
from list_items
)
where rnk <= 10
или для более поздних страниц
select id, col1, col2
from (
select id, col1, col2, dense_rank() over (order by id) as rnk
from list_items
)
where rnk > 10 and <= 20
Если у вас есть идентификатор в таблице списка без идентификаторов, и вы хотите принять их во внимание, тогда вы можете использовать подзапрос для этой таблицы и объединение (которое позволяет включать и другие столбцы списка):
select l.id, li.col1, li.col2
from (
select id, dense_rank() over (order by id) as rnk
from list
) l
left join list_items li on li.id = l.id
where l.rnk <= 10;
Если вы используете Oracle 12 c или выше, вы можете использовать усовершенствования [ограничение строки], чтобы упростить это:
select l.id, li.col1, li.col2
from (
select id
from list
order by id
fetch next 10 rows only
) l
left join list_items li on li.id = l.id;
или для второй страницы:
offset 10 rows fetch next 10 rows only