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.
Proposer le dernier enregistrement de visite qui remplit les conditions.
Que feriez-vous de mieux ?
Tout d'abord, mettez en œuvre quelque chose, sortez le dernier enregistrement de visite du code personne 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 fait 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 les sous-requêtes 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_recordWHERE 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 ? Autrement dit, il existe plusieurs groupes de concepts.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_codeRésultat de filtrage incorrect :
Encodage correct :
SELECT 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
)#🎜🎜 #
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!