Heim >Datenbank >MySQL-Tutorial >Wie kann ich die neuesten Datensätze für jede Methode und ID in MySQL und PostgreSQL effizient abrufen?

Wie kann ich die neuesten Datensätze für jede Methode und ID in MySQL und PostgreSQL effizient abrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-21 17:33:11244Durchsuche

How to Efficiently Retrieve the Most Recent Records for Each Method and ID in MySQL and PostgreSQL?

Abrufen der neuesten Datensätze aus einer MySQL-Tabelle

Problem:

Eine MySQL-Tabelle speichert die Antworten auf verschiedene RPC Aufrufe mit Feldern für Zeitstempel, Methode, ID und Antwort. Ziel ist es, die aktuellsten Antworten für alle Kombinationen aus Methode und ID abzurufen.

Annahmen:

  • Für jedes Datum kann es eine Antwort geben eine bestimmte Methode/ID.
  • Nicht alle Aufrufkombinationen sind unbedingt für ein bestimmtes Datum vorhanden.
  • Es gibt zahlreiche Methoden, Tausende von IDs und mindestens 365 verschiedene Daten.

Lösung:

Die folgende Abfrage kann verwendet werden, um das gewünschte Ergebnis mithilfe von MySQL-Variablen effizient abzurufen um einen JOIN zu vermeiden:

SELECT * FROM (
    SELECT *, if(@last_method=method,0,1) as new_method_group, @last_method:=method 
    FROM rpc_responses 
    ORDER BY method, timestamp DESC
) as t1
WHERE new_method_group=1;

Diese Abfrage weist zunächst jeder Zeile einen new_method_group-Wert zu, der den Beginn einer neuen Methode angibt Gruppe. Anschließend werden die Ergebnisse so gefiltert, dass nur Zeilen mit einem new_method_group-Wert von 1 enthalten sind. Dadurch wird sichergestellt, dass nur die aktuellste Zeile für jede Methode im Endergebnis enthalten ist.

Alternative Lösung für PostgreSQL:

PostgreSQL bietet eine integrierte Funktion für diese Aufgabe:

SELECT DISTINCT ON (method) timestamp, method, id, response
FROM rpc_responses
WHERE 1 # some where clause here
ORDER BY method, timestamp DESC

Das obige ist der detaillierte Inhalt vonWie kann ich die neuesten Datensätze für jede Methode und ID in MySQL und PostgreSQL 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