Abrufen historischer Standorte mithilfe des MAX-Datums innerhalb einer Join-Anweisung
Beim Abrufen historischer Standorte für eine bestimmte Datensatz-ID sind bei einem Benutzer Leistungsprobleme aufgetreten doppelte Einträge in den Ergebnissen. Der Benutzer hat versucht, dieses Problem zu beheben, indem er mehrere Tabellen zusammenführte und nach der empfangenen_ID filterte, aber die erwartete Ausgabe wurde nicht erreicht.
Um dieses Problem zu beheben, wird empfohlen, die Abfrage wie folgt zu ändern:
SELECT t1.received_id , t1.transaction_id , t1.date_modified , l.location FROM transactions t1 JOIN ( SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record ON max_record.received_id = t1.received_id AND max_record.maxmodify = t1.date_modified JOIN locations l ON l.location_id = t1.location_id JOIN received r ON r.received_id = t1.received_id WHERE t1.received_id = '1782' ORDER BY t1.date_modified DESC
Die Schlüsseländerung besteht darin, die Transaktionstabelle zweimal zu verknüpfen: Einmal für die Hauptabfrage und einmal innerhalb einer Unterabfrage, um den maximalen date_modified-Wert für jede empfangene_ID zu finden. Diese Unterabfrage wird dann verwendet, um die Hauptabfrage zu filtern und nur die Zeilen mit den neuesten date_modified-Werten zurückzugeben.
Der Kern dieser Technik ist in dem folgenden allgemeinen Muster zusammengefasst:
SELECT x.* FROM my_table x JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y ON y.id = x.id AND y.max_thing = x.thing;
Dies Der Ansatz eliminiert effektiv doppelte Einträge und liefert das gewünschte Ergebnis, indem für jede Datensatz-ID und jeden Standort nur die letzte Änderungszeit angezeigt wird.
Das obige ist der detaillierte Inhalt vonWie kann mit SQL effizient der aktuellste historische Speicherort für eine bestimmte Datensatz-ID abgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!