Vinzenz Mai: SQL Select

Beitrag lesen

Hallo,

habe eine Frage zur richtigen Abfrage.

eine Tabelle mit Spalte Messpunkt, Wert, DatumZeit
Aktuell sind in der Tabelle ca. 300.000 Zeilen mit Daten der letzen 2 Jahren.
Werte von ca 200 Messpunkten.

Gewünschtes Ergebnis:
Spalten = 5; Werte von 4 Messpunkten im Zeitraum DatumZeit x bis DatumZeit y
Werte von Messpunkt_1, Werte von Messpunkt_2, ..3, ..4, DatumZeit

das sieht nach einem analogen Problem zu dem aus diesem Archivthread aus (mit ein paar kleinen Abweichungen :-)).

Die Messwerte werden nicht im gleichen Intervall in der Tabelle gespeichert. zB. Wert1 alle 60 Sek., Wert2 alle 300 sek, Wert3 alle 900 sek., Wert4 alle 300 sek.

DatumZeit Spalte der Ausgabe sollte den grössten Intervall haben. (im Beispiel eine Zeile pro 900 sek)

die Spalte Lambda aus verlinktem Problem entspricht Deinem Intervall und Du willst statt des Messwertes den Durchschnitt, sprich verwende statt MAX() die Aggregatsfunktion AVG(), die Dein Datenbankmanagementsystem bestimmt kennt. Die Messreihe entspricht Deinem Messpunkt.

Die Werte mit kleinerem Intervall sollten in der Ausgabe den Durchschnitt innerhalb des grössten Intervalls bilden. (im Beispiel: Wert1 den Durchschnitt von 15 Werten pro Zeile)

bilde die Datumsspalte auf Einheiten des größten Intervalls ab, zum Beispiel mit

Datum (am besten umgerechnet in UTC-Sekunden, um nicht Probleme mit der
    Sommerzeit zu bekommen) ganzzahlig dividiert durch das größte Intervall.

Du kannst diese Spalte auch gern wieder in UTC-Zeit zurückrechnen, um lesbarere Werte zu bekommen, d.h. Du könntest von vornherein

Datum - Datum Modulo (größtes Intervall) Sekunden

rechnen. (Auch hier Sommerzeit berücksichtigen und daher am besten in UTC-Zeit rechnen).

und nach dieser berechneten Spalte gruppieren (statt nach lambda).

Freundliche Grüße

Vinzenz