Использование функций LEAD и LAG
LEAD имеет возможность вычислить выражение для следующих строк (строк, которые будут следовать после текущей строки) и вернуть значение в текущую строку. Общий синтаксис LEAD показан ниже:
LEAD (sql_expr, смещение, по умолчанию) OVER (analytic_clause)
sql_expr - это выражение для вычисления из начального ряда.
смещение - это индекс ведущей строки относительно текущей строки. Offset - положительное целое число со значением по умолчанию 1.
по умолчанию - это значение, которое возвращается, если указатель на строку находится за пределами диапазона разбиения.
Синтаксис LAG аналогичен за исключением того, что смещение для LAG входит в предыдущие строки.
SELECT deptno, empno, sal,
LEAD(sal, 1, 0) OVER (PARTITION BY dept ORDER BY sal DESC) NEXT_LOW_SAL,
LAG(sal, 1, 0) OVER (PARTITION BY dept ORDER BY sal DESC) PREV_HIGH_SAL
FROM emp
WHERE deptno IN (10, 20)
ORDER BY deptno, sal DESC;
DEPTNO EMPNO SAL NEXT_LOWER_SAL PREV_HIGHER_SAL
------- ------ ----- -------------- ---------------
10 7839 5000 2450 0
10 7782 2450 1300 5000
10 7934 1300 0 2450
20 7788 3000 3000 0
20 7902 3000 2975 3000
20 7566 2975 1100 3000
20 7876 1100 800 2975
20 7369 800 0 1100
8 rows selected.