SQL : Fonctions LAG et LEAD

Les fonctions LAG et LEAD sont deux fonctions analytiques qui permettent d'accéder à une ligne avant ou après la ligne courante, la syntaxe de ces fonctions est simple :
LAG|lead(colonne, nombre de ligne avant|après la ligne courante, valeur par default pour la première|dérniere ligne).

La valeur par défaut n'est pas obligatoire si vous l'omettez Oracle renvoie NULL à la place, un petit exemple :
SQL> select empno,sal,deptno,sal-lag(sal,1)
2 over (order by empno) as trou
3 from emp order by empno;

EMPNO SAL DEPTNO TROU
7369 800 20
7499 1600 30 800
7521 1250 30 -350
7566 2975 20 1725
7654 1250 30 -1725
7698 2850 30 1600
7782 2450 10 -400
7788 3000 20 550
7839 5000 10 2000
7844 1500 30 -3500
7876 1100 20 -400
7900 950 30 -150
7902 3000 20 2050
7934 1300 10 -1700

14 ligne(s) sélectionnée(s).

L’exemple précédent calcul la différence de salaire entre un employé et celui qui le précède directement dans empno, le suivant calcule l'inverse :

SQL> select empno,sal,deptno,sal-lead(sal,1)
2 over (order by empno) as trou
3 from emp order by empno;

EMPNO SAL DEPTNO TROU
7369 800 20 -800
7499 1600 30 350
7521 1250 30 -1725
7566 2975 20 1725
7654 1250 30 -1600
7698 2850 30 400
7782 2450 10 -550
7788 3000 20 -2000
7839 5000 10 3500
7844 1500 30 400
7876 1100 20 150
7900 950 30 -2050
7902 3000 20 1700
7934 1300 10

14 ligne(s) sélectionnée(s).

voire le post fonctions analytiques