Heim >Datenbank >MySQL-Tutorial >So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt
Dies ist ein Erfassungsblatt zur Erfassung der Besuche von Personen.
Die Daten in der Datentabelle erfassen genau die Hutfarbe, die Uhrzeit und den Personencode (für jede Person eindeutig), den jede Person bei ihrem Besuch trägt.
Erstellen Sie den neuesten Besuchsdatensatz, der die Bedingungen erfüllt.
Was würdest du am besten können?
Um zunächst eines zu implementieren: Nehmen Sie den letzten Besuchsdatensatz des Personencodes A101 heraus.
Zeigen Sie zunächst das falsche SQL-Beispiel: die Verwendung der Funktion max() als selbstverständlich.
SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record WHERE user_code='A101' ;
Abfrageergebnisse (falsche Ergebnisse):
Natürlich sind die Daten zunächst sichtbar Blick Es sieht aus wie etwas, ist aber tatsächlich falsch.
Warum ist das falsch? Du kannst mir ein wenig erzählen, da sich einige Leute für den Kommentarbereich interessieren (Brüder können gerne ihre eigene Meinung äußern).
Eine kurze Beschreibung: Unser Fehlerbeispiel wird nicht mit „group by“ verwendet. Tatsächlich können wir es derzeit nur mit MySQL ausführen, und viele Datenbanken melden Fehler direkt.
Dann wird die Ausführung ausgeführt. Tatsächlich entspricht MySQL zu diesem Zeitpunkt der Behandlung der gesamten Tabelle als Inhaltsblock, um einen komprimierten Abruf durchzuführen.
Wir haben die Where-Bedingung user_code='A101' hinzugefügt, sodass der gesamte Inhaltsblock andere Daten herausfiltert, die nicht user_code='A101' sind.
Mit anderen Worten: Bei dieser laxen Ausführung garantiert MySQL, dass max den Maximalwert (der relevanten Spalte) zurückgibt, für andere Spaltenfelder ist dies jedoch nicht garantiert.
Die korrekten Daten sind:
Ist max(id) unbrauchbar?
Richtige Verwendung (verwenden Sie den maximalen ID-Wert, der die Bedingungen erfüllt, als Bedingung):
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 ' )
Abfrageergebnisse:
Aber angesichts der Art und Weise, wie die Unterabfrage oben verwendet wird,
müssen mich alle insgeheim beschimpft haben. Ist es so mühsam, die neuesten Daten zu erhalten?
Gibt es etwas Einfacheres?
Ja.
Zum Beispiel haben wir festgestellt, dass die ID automatisch inkrementiert wird und die Daten mit der größten ID (Daten, die die Bedingungen erfüllen) die neuesten sind.
Dann können wir DESC in umgekehrter Reihenfolge verwenden, um die neuesten Daten zu erhalten:
DESC ist umgekehrte Reihenfolge/absteigende Reihenfolge.
PS
Oder nach Zeit Umgekehrte Reihenfolge:
SELECT *
FROM vist_recordWHERE user_code='A101'ORDER BY create_time DESC
LIMIT 1;
Abfrageergebnisse:
I So einfach ist das umsetzen?
Was wäre, wenn wir nicht A101 angeben müssten, sondern die aktuellsten Daten aller Beteiligten? Das heißt, es gibt mehrere Gruppen von Konzepten.Die neuesten Qualifikationsdaten für jede Kategorie
Die orangefarbenen Kästchen sind die neuesten Datensätze von A101, B202 und C303, die wir herausnehmen möchten.
Falsches Beispiel:
SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record GROUP BY user_codeFalsches Filterergebnis:
Richtig Kodierung:
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
)
Das obige ist der detaillierte Inhalt vonSo finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!