Extraire la ligne supérieure de chaque groupe dans les bases de données SQL
Le regroupement et l'analyse des données sont fondamentaux dans la gestion de bases de données. Souvent, vous devez identifier la rangée supérieure (par exemple, l'entrée la plus récente) au sein de chaque groupe. Cet article montre comment y parvenir efficacement à l'aide de SQL.
Exploiter les fonctions de la fenêtre
Bien que SQL n'offre pas de fonction d'agrégation dédiée pour cette tâche, les fonctions Window fournissent une solution élégante. Ces fonctions fonctionnent sur des ensembles de lignes dans une plage définie, permettant des calculs et des agrégations sur des sous-ensembles de données.
Considérons un tableau nommé "DocumentStatusLogs" avec les colonnes "DocumentID", "Status" et "DateCreated". Pour récupérer le dernier statut de chaque document, utilisez cette requête SQL :
<code class="language-sql">WITH RankedLogs AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) as rn FROM DocumentStatusLogs ) SELECT * FROM RankedLogs WHERE rn = 1;</code>
L'expression de table commune (CTE) "RankedLogs" utilise ROW_NUMBER()
pour classer les lignes dans chaque partition "DocumentID", classées par "DateCreated" (décroissant). La requête principale sélectionne ensuite uniquement les lignes avec rn = 1
, renvoyant ainsi la ligne supérieure de chaque groupe.
Normalisation et intégrité des données
La question initiale touche également à la normalisation des bases de données. L'exemple de table ("DocumentStatusLogs") conserve un historique des changements de statut. Conserver cet historique est utile pour suivre les changements au fil du temps. Toutefois, si vous avez besoin d'un accès immédiat au dernier statut, envisagez d'ajouter une colonne « CurrentStatus » à une table « CurrentDocuments » et d'utiliser un déclencheur pour la mettre à jour. Cela nécessite une gestion minutieuse pour garantir la cohérence des données et éviter les anomalies.
En combinant les fonctions de fenêtre et une considération réfléchie de la normalisation des données, vous pouvez récupérer efficacement la ligne supérieure de chaque groupe de votre base de données SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!