Considérez le tableau suivant contenant les informations du document :
id | rev | content |
---|---|---|
1 | 1 | ... |
2 | 1 | ... |
1 | 2 | ... |
1 | 3 | ... |
Le but est de récupérer une ligne par identifiant, contenant uniquement le document ayant le plus grand numéro de révision (rev). Le résultat attendu pour les données données est :
id | rev | content |
---|---|---|
1 | 3 | ... |
2 | 1 | ... |
Ce problème se produit généralement dans SQL où l'utilisateur est invité à trouver la ligne de données avec la valeur maximale dans la colonne pour un identifiant de groupe donné.
La première méthode consiste à créer une sous-requête qui identifie l'identifiant du groupe (id) et la valeur maximale dans la colonne rev. Cette sous-requête peut être jointe à la table principale en utilisant une condition d'égalité sur l'identifiant du groupe et la valeur maximale.
<code class="language-sql">SELECT a.id, a.rev, a.contents FROM YourTable a INNER JOIN ( SELECT id, MAX(rev) rev FROM YourTable GROUP BY id ) b ON a.id = b.id AND a.rev = b.rev</code>
La deuxième méthode utilise une opération de jointure gauche pour associer la table à elle-même. Spécifiez les conditions d'égalité sur les identifiants de groupe (id). Pour garantir que seule la ligne avec la valeur de rev la plus élevée est sélectionnée, ajoutez une condition qui vérifie si la valeur de rev droite est inférieure à la valeur de rev gauche. Enfin, appliquez un filtre pour afficher uniquement les lignes avec une valeur de rev droite de NULL (indiquant qu'une valeur de rev maximale existe).
<code class="language-sql">SELECT a.* FROM YourTable a LEFT OUTER JOIN YourTable b ON a.id = b.id AND a.rev < b.rev WHERE b.id IS NULL;</code>
Les deux solutions produisent les mêmes résultats et sont compatibles SQL ANSI. Le choix le plus approprié dépend des préférences personnelles et des caractéristiques spécifiques de performances de la base de données. Une analyse comparative est recommandée pour déterminer la meilleure approche pour différents scénarios.
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!