Datum | Umsatz
Oktober 08 | 65,00
Januar 09 | 37,00
Februar 09 | 30,00
Hat jemand ne Idee für sone Abfrage? Wie gruppiert man das am Besten? Eventuell mit Substring den Monat und das Jahr holen und danach gruppieren?Woher kriegt man dann aber am Besten die Monatsnamen?..
Jepp, sogar daß ich deine halbe Antwort vervollständige, denn es fehlt die Gruppierung:
test=*# select * from umsatz ;
tag | umsatz
------------+--------
2008-12-24 | 100
2009-01-10 | 50
2009-01-20 | 200
2009-02-25 | 225
(4 rows)
test=*# select to_char(tag, 'FMMonth YY'), sum(umsatz) from umsatz group by 1 order by 1;
to_char | sum
-------------+-----
December 08 | 100
February 09 | 225
January 09 | 250
(3 rows)
Kleiner Schönheitsfehler: es kommen leider keine lokalisierten Monatsnamen. Also fixe ich das auch mal noch schnell:
test=# SET lc_messages = 'de_DE.UTF-8';
SET
test=*# select * from umsatz ;
tag | umsatz
------------+--------
2008-12-24 | 100
2009-01-10 | 50
2009-01-20 | 200
2009-02-25 | 225
2009-03-10 | 100
(5 rows)
test=*# select to_char(tag, 'TMMonth YY'), sum(umsatz) from umsatz group by 1 order by 1;
to_char | sum
-------------+-----
Dezember 08 | 100
Februar 09 | 225
Januar 09 | 250
März 09 | 100
@ads: TM, nicht FM, und lokalisierte Monatsnamen basieren auf lc_messages, nicht auf lc_time.
Als Bonus mal noch eine Version, die auch Monate anzeigt, in denen kein Umsatz war (was wir Dir natürlich nicht wünschen…):
test=*# select to_char(foo.monat, 'TMMonth YY') as monat, sum(umsatz) from (select '2008-01-01'::date + n*'1month'::interval as monat from generate_series(0,23)n) foo left join umsatz on (to_char(umsatz.tag,'TMMonth YY')=to_char(foo.monat,'TMMonth YY')) group by foo.monat order by foo.monat;
monat | sum
--------------+-----
Januar 08 |
Februar 08 |
März 08 |
April 08 |
Mai 08 |
Juni 08 |
Juli 08 |
August 08 |
September 08 |
Oktober 08 |
November 08 |
Dezember 08 | 100
Januar 09 | 250
Februar 09 | 225
März 09 | 100
April 09 |
Mai 09 |
Juni 09 |
Juli 09 |
August 09 |
September 09 |
Oktober 09 |
November 09 |
Dezember 09 |
(24 rows)