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>
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>
Ausgabe:
ID | USER | TIME | IO |
---|---|---|---|
2 | 9 | 1370931664 | out |
3 | 6 | 1370932128 | out |
5 | 12 | 1370933037 | in |
Erklärung:
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.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!