Maison > base de données > tutoriel mysql > Comment récupérer efficacement la ligne supérieure de chaque groupe dans une base de données SQL ?

Comment récupérer efficacement la ligne supérieure de chaque groupe dans une base de données SQL ?

Mary-Kate Olsen
Libérer: 2025-01-25 19:57:15
original
911 Les gens l'ont consulté

How to Efficiently Retrieve the Top Row for Each Group in a SQL Database?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal