Heim > Datenbank > MySQL-Tutorial > Wie wähle ich die aktuellste Zeile pro Benutzer in einer Datenbank mit Zeitstempeln aus?

Wie wähle ich die aktuellste Zeile pro Benutzer in einer Datenbank mit Zeitstempeln aus?

Linda Hamilton
Freigeben: 2025-01-13 13:06:46
Original
496 Leute haben es durchsucht

How to Select the Most Recent Row per User in a Database with Timestamps?

Den aktuellsten Eintrag für jeden Benutzer abrufen: Eine Datenbanklösung

Herausforderung:

Die effiziente Auswahl des neuesten Datensatzes für jeden Benutzer in einer Datenbanktabelle mit Zeitstempeln und Statusflags („in“ oder „out“) kann komplex sein, insbesondere wenn ein Benutzer über mehrere Einträge verfügt, die denselben neuesten Zeitstempel verwenden.

Ansatz:

Dieses Problem wird mit zwei unterschiedlichen SQL-Abfragen gelöst:

1. Abfrage nach mehreren übereinstimmenden Datensätzen:

Diese Abfrage identifiziert alle Datensätze mit dem maximalen Zeitstempel für jeden Benutzer.

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.time = (SELECT MAX(t2.time)
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user);</code>
Nach dem Login kopieren

Ausgabe:

ID USER TIME IO
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in

2. Abfrage nach einem einzelnen passenden Datensatz:

Diese Abfrage gibt nur den aktuellsten Datensatz pro Benutzer zurück und priorisiert bei Zeitstempelübereinstimmungen die höchste ID.

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.id = (SELECT t2.id
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user
                 ORDER BY t2.time DESC, t2.id DESC
                 LIMIT 1);</code>
Nach dem Login kopieren

Ausgabe:

ID USER TIME IO
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in

Erklärung:

  • Die erste Abfrage verwendet eine korrelierte Unterabfrage, um den neuesten Zeitstempel (MAX(time)) für jeden Benutzer zu finden und ruft dann alle Einträge ab, die mit diesem Zeitstempel übereinstimmen. Dies behandelt Situationen mit mehreren Datensätzen, die denselben letzten Zeitstempel haben.
  • Die zweite Abfrage verwendet ORDER BY time DESC, id DESC, um den neuesten Zeitstempel und dann die höchste ID zu priorisieren, um sicherzustellen, dass mit LIMIT 1 ein einziger, definitiv aktuellster Datensatz ausgewählt wird.

Die Wahl zwischen diesen Abfragen hängt davon ab, ob Sie alle Datensätze mit dem neuesten Zeitstempel oder nur den aktuellsten Datensatz pro Benutzer benötigen. Die zweite Abfrage bietet eine präzisere Lösung, wenn nur ein Datensatz erforderlich ist.

Das obige ist der detaillierte Inhalt vonWie wähle ich die aktuellste Zeile pro Benutzer in einer Datenbank mit Zeitstempeln aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage