Załóżmy masz (w PostgreSQL 9.1) tabelę tak:GROUP BY kolejnych terminach ustalonych przez luk
date | value
które mają pewne braki w nim (to znaczy: nie każdy możliwy termin pomiędzy min (data) i max (data) ma swój rząd).
Moim problemem jest to, jak agregować te dane tak, że każda grupa spójne (bez przerw) traktuje się osobno, tak:
min_date | max_date | [some aggregate of "value" column]
Jakieś pomysły jak to zrobić? Wierzę, że jest to możliwe z funkcjami okna, ale po chwili próbując z lag()
i lead()
trochę utknąłem.
Na przykład, jeśli dane są tak:
date | value
---------------+-------
2011-10-31 | 2
2011-11-01 | 8
2011-11-02 | 10
2012-09-13 | 1
2012-09-14 | 4
2012-09-15 | 5
2012-09-16 | 20
2012-10-30 | 10
wyjście (dla sum
jako kruszywo) byłoby:
min | max | sum
-----------+------------+-------
2011-10-31 | 2011-11-02 | 20
2012-09-13 | 2012-09-16 | 30
2012-10-30 | 2012-10-30 | 10
Dane pocztowe i pożądane wyniki –
Clodoaldo, dziękuję za zainteresowanie. na przykład, jeśli dane są takie: data \t | wartość --------------- + ------- 2011-10-31 | 2 2011-11-01 | 8 2011-11-02 | 10 2012-09-13 | 1 2012-09-14 | 4 2012-09-15 | 5 2012-09-16 | 20 2012-10-30 | 10 Dane wyjściowe (dla "sumy" jako agregatu) byłyby następujące: min | max | suma ----------- + ------------ + ------- 2011-10-31 | 2011-11-02 | 20 2012-09-13 | 2012-09-16 | 30 2012-10-30 | 2012-10-30 | 10 –
Słowo, którego szukasz, jest * następujące po sobie *. Zobacz [tę odpowiedź] (http://stackoverflow.com/a/8015107/398670). –