Я не undersatand, что так трудно понять, о ранге() по убывающей дата публикации, но здесь это так или иначе:
select aid
, email
, trunc((rnk-1)/5) + 1 as pageno
from (select aid
, email
, rank() over (order by post_date desc) as rnk
from ads)
Возможно, вам потребуется настроить расчет номера страницы; этот вопрос несколько неоднозначен («номер страницы, где объявление будет указано для всех объявлений, которые будут указаны на странице, отличной от первой страницы»).
В комментарии @AndriyM, в реальной жизни мы используем ROW_NUMBER() для этого, а не RANK(), так как эта функция будет производить отчетливый номер для каждой строки без пробелов, которые ни RANK(), ни DENSE_RANK может гарантия. Это будет выглядеть
row_number() over (order by post_date desc, aid asc) as rn
Пожалуйста, имейте в виду, что ваш учитель, вероятно, достаточно умен, чтобы знать о StackOverflow, так что будьте честны о присвоении кредита, где это связано.
Я думаю, что это ROW_NUMBER вместо RANK. С RANK вы можете получить что-то вроде «1,2,3,3,5,5,5,8, ...», а результирующие номера страниц будут «1,1,1,1,1,1,1, 2, ... ', т.е. более 5 элементов на одной странице. Конечно, с ROW_NUMBER было бы лучше обеспечить тай-брейк, и я думаю, что «помощь» должна быть хорошей, как одна. (Даже если это не идеальный вариант, он, по крайней мере, сделает результаты предсказуемыми). –