Abfrage der aktuellsten Datensätze an mehreren Daten

Abfrage der aktuellsten Datensätze an mehreren Daten

am 14.09.2007 17:18:51 von Jonas Wegener

Hallo,

bei einer SQL Abfrage komme ich nicht mehr weiter;

Ausgangssituation:

Ich habe eine Tabelle mit Messwerten für verschiedene Standorte und an
verschiedenen Tagen. Nun werden spätestens alle 6 Stunden neue Daten
eingespielt, dabei erhält jeder Datensatz beim Einfügen einen timestamp.
Wenn die Daten älter als 6 Stunden sind, sollen keine Ergebnisse
ausgegeben werden.

Bei der Abfrage der Daten soll nun aber immer nur der zuletzt eingefügte
Datensatz für einen Standort für die vier nächsten Tage ausgegeben
werden (was ja mit dem timestamp möglich sein sollte).
Für Standort 1 sollten bspw. die mit Pfeilen Markierten Datensätze
ausgegeben werden.


Tabelle "vorhersage":

datum | standort_id | wert_1 | ... | wert_n | erstellungszeitpunkt
2007-09-14 | 1 | ... | ... | ... | 12345678
2007-09-14 | 1 | ... | ... | ... | 15432109
2007-09-14 | 1 | ... | ... | ... | 19876543 <=
2007-09-15 | 1 | ... | ... | ... | 12345678 <=
2007-09-16 | 1 | ... | ... | ... | 13456789
2007-09-16 | 1 | ... | ... | ... | 19345678 <=
2007-09-16 | 2 | ... | ... | ... | 12345678
2007-09-17 | 1 | ... | ... | ... | 12345678 <=


Meine Abfrage dazu sieht bisher wie folgt aus.

SELECT datum, wert1, wertn
FROM vorhersage
WHERE standort_id = $var_standort_id$
AND NOW() <= (erstellungszeitpunkt + INTERVAL 6 HOUR) # "gültige"
Datensätze
AND datum BETWEEN NOW() AND (NOW() + INTERVAL 96 HOUR) # nächste
vier Tage
AND erstellungszeitpunkt IN (
SELECT max(erstellungszeitpunkt)
FROM vorhersage
WHERE standort_id = $var_standort_id$
AND datum BETWEEN NOW() AND (NOW() + INTERVAL 96 HOUR)
AND NOW() <= (erstellungszeitpunkt + INTERVAL 6
GROUP BY standort_id, datum
)
ORDER BY datum


Ich bekomme also die Daten, der nächsten 96 Stunden, nur möglicherweise
nicht die korrekten bzw. zu viele.
In dem oben gegebenen Beispiel würde z.B. der erste Datensatz
sowie der dritte Datensatz für '2007-09-14' ausgegeben werden, da der
Erstellungszeitpunkt des letzten Datensates ebenfalls ein Maximum des
Erstellungszeitpunkts für '2007-09-17' ist, aber eben auch ein Datensatz
für '2007-09-14' zum gleichen Zeitpunkt erstellt wurde.

Es scheint mit dem "erstellungszeitpunkt IN" so wohl nicht zu gehen,
aber an dieser Stelle gehen mir leider die Ideen aus.
Da in der Datenbank ca. 60000 Datensätze vorliegen, ist es mir wichtig
die Abfrage komplett in der Datenbank auszuführen um nicht unnötig viele
Daten auslesen zu müssen und diese noch in einer Programmiersprache
auszuwerten.

Hat jemand von Euch eine Idee?


Vielen Dank

Jonas