1. Pourquoi les fonctions de fenêtrage ont révolutionné le SQL

Une clause GROUP BY classique condense les enregistrements d’un groupe en une ligne de résumé unique, faisant disparaître les détails individuels. À l’inverse, les Window Functions exécutent des calculs d’agrégation ou de positionnement sur un ensemble de lignes associées (la fenêtre) tout en conservant chaque ligne originale du jeu de données intacte.

2. Syntaxe et partitionnement avec la clause OVER

La clause OVER() définit les frontières et l’ordonnancement de la fenêtre de calcul :

SELECT 
    date_transaction,
    compte_iban,
    montant_chf,
    -- Classement des transactions par montant au sein de chaque compte
    ROW_NUMBER() OVER(PARTITION BY compte_iban ORDER BY montant_chf DESC) AS rang_transaction,
    -- Cumul progressif du solde au fil du temps (Running Total)
    SUM(montant_chf) OVER(PARTITION BY compte_iban ORDER BY date_transaction ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS solde_courant,
    -- Valeur de la transaction précédente (analyse temporelle de variation)
    LAG(montant_chf, 1) OVER(PARTITION BY compte_iban ORDER BY date_transaction) AS montant_precedent
FROM transactions;

3. Cas d’usage en entreprise

  • Détection de fraudes : Utiliser LAG() pour repérer deux débits successifs de montants anormaux à quelques secondes d’intervalle.
  • Rapports de gestion : Calculer la part de chaque facture dans le chiffre d’affaires mensuel global (montant / SUM(montant) OVER(PARTITION BY mois)) sans recourir à des auto-jointures coûteuses.