Maison > base de données > tutoriel mysql > Explication détaillée de l'exemple MySql : comment trouver la dernière ligne de données qui remplit les conditions

Explication détaillée de l'exemple MySql : comment trouver la dernière ligne de données qui remplit les conditions

WBOY
Libérer: 2022-07-08 14:59:49
avant
2045 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur mysql. Il organise principalement les questions liées à la façon de trouver les dernières lignes de données qui remplissent les conditions. Lorsque vous faites des affaires, vous devez souvent vérifier la dernière ligne de quelque chose. concept de dernier, pour les produits, on dit souvent que c'est par ordre chronologique, et dernier signifie le dernier. Regardons-le ensemble, j'espère que cela sera utile à tout le monde.

Explication détaillée de l'exemple MySql : comment trouver la dernière ligne de données qui remplit les conditions

Apprentissage recommandé : Tutoriel vidéo MySQL

Dans les affaires quotidiennes, vous avez souvent besoin de vérifier la dernière donnée.

Quant à la notion de dernier, pour les produits, on parle souvent d'ordre chronologique, et dernier signifie le plus récent.

Exemple combiné :

Il s'agit d'une feuille d'enregistrement pour enregistrer les visites des personnes.
Les données du tableau de données enregistrent avec précision la couleur du chapeau, l'heure et le code de personne (unique pour chaque personne) que chaque personne porte lors de sa visite.

Échantillon de données :

Ce qu'il faut faire est :

Proposer le dernier enregistrement de visite qui remplit les conditions.

Que feriez-vous de mieux ?

Tout d'abord, sortez le dernier relevé de visite de la personne code A101.

Montrez d'abord le mauvais exemple SQL : utiliser la fonction max() pour acquis.


SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record WHERE user_code='A101' ;

Résultats de la requête (mauvais résultats) :


Évidemment, les données peuvent être vues à un coup d'oeil Cela a l'apparence de quelque chose, mais c'est en réalité faux.

Pourquoi est-ce faux ? Vous pouvez m'en dire un peu, puisque certaines personnes sont intéressées par la zone de commentaires (les frères sont invités à exprimer leurs propres opinions).

Une brève description, max est une fonction d'agrégation. Notre exemple d'erreur n'est pas utilisé avec group by. En fait, seul mysql peut nous permettre de l'exécuter pour le moment, et de nombreuses bases de données signalent directement les erreurs.

Ensuite, l'exécution est exécutée. En fait, à ce stade, MySQL équivaut à traiter la table entière comme un bloc de contenu pour effectuer une récupération compressée.

Nous avons ajouté la condition Where user_code='A101', de sorte que l'ensemble du bloc de contenu filtre les autres données qui ne sont pas user_code='A101'.

En d'autres termes, dans ce type d'exécution laxiste, mysql garantit que max renvoie la valeur maximale (de la colonne concernée), mais ce n'est pas garanti pour les autres champs de colonne.

Les données correctes sont :

Est-ce que max(id) est inutilisable ?

Utilisation correcte (utilisez la valeur d'identifiant maximale qui remplit les conditions comme condition) :

SELECT
id,user_code,cap_color,create_time
FROM vist_record
WHERE id IN (SELECT MAX(id) AS id FROM vist_record WHERE user_code ='A101' )

Résultats de la requête :

Mais vu la façon d'utiliser la sous-requête ci-dessus,

tout le monde a dû me gronder secrètement, est-ce si difficile d'obtenir les dernières données ?

Y a-t-il quelque chose de plus simple ?

Oui.

Par exemple, nous avons déterminé que l'identifiant s'incrémente automatiquement et que les données avec l'identifiant le plus grand (données qui remplissent les conditions) sont les dernières.

Ensuite, nous pouvons utiliser l'ordre inverse DESC pour obtenir les dernières données :

DESC est l'ordre inverse/ordre décroissant.

PS


Ou selon le temps Ordre inverse :

SELECT *

FROM vist_record
WHERE user_code='A101'

ORDER BY create_time DESC
LIMIT 1;


Résultats de la requête :

Est c'est aussi simple que ça mettre en œuvre ?

Et si ce dont nous avions besoin n'était pas de spécifier A101 mais les dernières données de toutes les personnes impliquées ?

C'est-à-dire le concept de plusieurs groupes.

Les dernières données de qualification pour chaque catégorie

Les cases orange sont les derniers records des A101, B202 et C303, que nous souhaitons supprimer.

Exemple incorrect :

SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record GROUP BY user_code

Résultat de filtrage incorrect :

Encodage correct :

SÉLECTIONNER id ,user_code,cap_color,create_time FROM vist_record WHERE id in
(
SELECT MAX(id) AS id FROM vist_record GROUP BY user_code
)

Apprentissage recommandé : tutoriel vidéo mysql

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!

Étiquettes associées:
source:csdn.net
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal