Зависит от требований.
Вы можете использовать аналитические функции LAG () и LEAD (), чтобы получить информацию для следующей и предыдущей строк, т.е.
SQL> ed
Wrote file afiedt.buf
1 select ename,
2 sal,
3 lead(sal) over (order by ename) next_sal,
4 lag(sal) over (order by ename) prior_sal
5 from emp
6* order by ename
SQL> /
ENAME SAL NEXT_SAL PRIOR_SAL
---------- ---------- ---------- ----------
ADAMS 1100 1600
ALLEN 1600 2850 1100
BLAKE 2850 2450 1600
CLARK 2450 3000 2850
FORD 3000 950 2450
JAMES 950 2975 3000
JONES 2975 5000 950
KING 5000 1250 2975
MARTIN 1250 1300 5000
MILLER 1300 3000 1250
SCOTT 3000 800 1300
ENAME SAL NEXT_SAL PRIOR_SAL
---------- ---------- ---------- ----------
SMITH 800 1500 3000
TURNER 1500 1250 800
WARD 1250 1500
14 rows selected.
Если вы не хотите использовать аналитические функции, вы можете использовать PL / SQL-коллекции, BULK COLLECT данных в эти коллекции (используя предложение LIMIT, если у вас больше данных, чем вы хотите сохранить в PGA), а затем двигаться вперед и назад по своим коллекциям.