Heim >Datenbank >MySQL-Tutorial >Wie lassen sich die aktuellsten Standortdaten für jeden Datensatz in einer verknüpften Abrechnung effizient abrufen?

Wie lassen sich die aktuellsten Standortdaten für jeden Datensatz in einer verknüpften Abrechnung effizient abrufen?

Susan Sarandon
Susan SarandonOriginal
2024-12-08 02:37:10816Durchsuche

How to Efficiently Retrieve the Most Recent Location Data for Each Record in a Joined Statement?

Auswählen des aktuellsten Datums in einer verknüpften Anweisung: Fehlerbehebung beim Abrufen historischer Standortdaten

Diese Abfrage zielt darauf ab, die historischen Standorte eines Datensatzes abzurufen und die entsprechenden Termine. Allerdings dauert die Ausführung der aktuellen Implementierung übermäßig lange und führt zu doppelten Datensätzen. Die erwartete Ausgabe ist eine vereinfachte Liste von Datensätzen mit ihren aktuellsten Standorten.

Die ursprüngliche Abfrage versucht, das aktuellste Datum zu finden, das jeder Datensatz-ID zugeordnet ist, indem sie einen Selbstverknüpfungsvorgang ausführt. Dieser Ansatz ist jedoch ineffizient und kann insbesondere bei größeren Datensätzen zu Leistungsproblemen führen.

Korrekte Abfrage

Um die Abfrage zu optimieren, können wir die folgende korrigierte Version verwenden :

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

Erklärung

In dieser Abfrage stellen wir vor Ein allgemeiner Tabellenausdruck (CTE), um das maximale Datum für jede Datensatz-ID in der Transaktionstabelle zu ermitteln. Der CTE ist:

SELECT received_id, MAX(date_modified) AS maxmodify
FROM transactions
GROUP BY received_id

Wir verbinden dann die ursprüngliche Transaktionstabelle (t1) mit diesem CTE (max_record) im Feld „received_id“. Darüber hinaus filtern wir nach der Spalte „maxmodify“, um sicherzustellen, dass nur Transaktionen mit dem aktuellsten Datum enthalten sind. Dies optimiert die Abfrage, indem unnötige Verknüpfungen und Duplikate vermieden werden.

Mit dieser optimierten Abfrage können wir effektiv die historischen Standorte für jeden Datensatz abrufen und sicherstellen, dass wir nur den aktuellsten Standort für jede eindeutige Datensatz-ID abrufen.

Das obige ist der detaillierte Inhalt vonWie lassen sich die aktuellsten Standortdaten für jeden Datensatz in einer verknüpften Abrechnung effizient abrufen?. 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