Heim >Datenbank >MySQL-Tutorial >Wie kann mit SQL effizient der aktuellste historische Speicherort für eine bestimmte Datensatz-ID abgerufen werden?

Wie kann mit SQL effizient der aktuellste historische Speicherort für eine bestimmte Datensatz-ID abgerufen werden?

DDD
DDDOriginal
2024-12-07 04:46:12593Durchsuche

How to Efficiently Retrieve the Most Recent Historic Location for a Given Record ID Using SQL?

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!

Stellungnahme:
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