2 Stimmen

MySQL Abfrage, die neuesten Werte aus einer historischen Wertetabelle abruft.

Ich habe eine Tabelle mit historischen Werten. Jedes Mal, wenn einer der Werte aktualisiert wird, wird eine Kopie dieses Werts in diese Tabelle eingefügt und nach "request_id" indiziert.

Ich suche nach einer Möglichkeit, die aktuellsten Werte für jede "request_id" zu erhalten, ohne die gesamte Tabelle abrufen zu müssen.

Aktuelle Tabelle:

ID | Modified | request_id | value 
-------------------------------------
 1 |       10 |          1 | "one"
 2 |       15 |          1 | "two"
 3 |       15 |          2 | "three"
 4 |       18 |          1 | "fore"
 5 |       25 |          3 | "five"
 6 |       36 |          1 | "six"

Ergebnistabelle

ID | Modified | request_id | value 
-------------------------------------
 3 |       15 |          2 | "three"
 5 |       25 |          3 | "five"
 6 |       36 |          1 | "six"

Ich verwende PHP und SQLite, falls das einen Unterschied macht.

3voto

Khez Punkte 10032

SQLite? Hmz, kann nicht testen, aber versuchen Sie dies:

SELECT value FROM your_table GROUP BY request_id ORDER BY modifier;

Wenn Sie Probleme mit dieser Abfrage haben, posten Sie den Fehler und wir werden versuchen, es zu beheben.

1voto

JLZenor Punkte 1334

Ich habe die Syntax möglicherweise leicht falsch, aber das sollte Sie in die richtige Richtung weisen.

"SELECT DISTINCT request_id FROM history_table ORDER BY modified"

Dies wird nur jeweils eine Anfrage-ID abrufen, sodass Sie keine Duplikate erhalten.

-1voto

Asterisk Punkte 3456
SELECT *
FROM test_table t1
WHERE t1.modified IN (SELECT max(Modified)
                      FROM test_table t2
                      WHERE t2.request_id = t1.request_id
                      GROUP By t2.request_id)

Hinweis: Dies ist keine sehr effiziente Methode, da es eine korrelierte Unterabfrage hat.

EDIT: Ohne Korrelation, für PostgreSQL

SELECT * FROM test
WHERE (request_id, modified) IN (SELECT request_id, max(modified)
                                 FROM test
                                 GROUP BY request_id);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X