Я хотел бы взять простой запрос по списку членов, которые проиндексированы числом, и сгруппировать их в «корзины» одинакового размера. Итак, базовый запрос:
select my_members.member_index from my_members where my_members.active=1;
Скажем, я вернул 1000 номеров индексов, теперь я хочу разделить их на 10 групп одинакового размера по индексу max и min членов. Что-то вроде:
Активные участники от 0 до 400: 100
Активные участники с 401 по 577: 100
...
Активные члены с 1584 по 1765: 100
Лучшее, что я мог придумать, - это неоднократно запрашивать максимум (my_members.member_index) с увеличивающимся пределом rownum:
for r in 1 .. 10 loop
select max(my_members.member_index)
into ranges(r)
from my_members
where my_members.active = 1
and rownum < top_row
order by my_members.member_index asc;
top_row := top_row + 100;
end loop;