Angenommen, Sie haben (in Postgres 9.1) eine Tabelle wie diese:
%Vor%die einige Lücken haben (ich meine: nicht jedes mögliche Datum zwischen min (Datum) und max (Datum) hat seine Zeile).
Mein Problem ist, wie man diese Daten aggregiert, so dass jede konsistente Gruppe (ohne Lücken) wie folgt behandelt wird:
%Vor% Irgendwelche Ideen, wie es geht? Ich glaube, das ist mit Fensterfunktionen möglich, aber nach einiger Zeit versuche ich mit lag()
und lead()
etwas zu hängen.
Zum Beispiel wenn die Daten so sind:
%Vor% Die Ausgabe (für sum
als Aggregat) wäre:
Einfachere und billigere Version:
%Vor%Mein erster Versuch war komplexer und teurer:
%Vor%Die Ausgabe:
%Vor%Hier ist ein Weg, es zu lösen.
Erstens, um den Beginn von aufeinanderfolgenden Serien zu erhalten, würde diese Abfrage Ihnen das erste Datum geben:
%Vor%ebenfalls für das Ende aufeinanderfolgender Serien,
%Vor%Sie können diese Ansichten erstellen, um Abfragen mit ihnen zu vereinfachen.
Wir brauchen nur den ersten, um Gruppenbereiche zu bilden
%Vor%Tags und Links sql postgresql window-functions aggregate