ich bin neu hier, also büdde nicht so hart zu mir sein ^^.
Irgendwie find ich nichts im Internet darüber, deswegen frag ich mal hier, ob mir jemand weiterhelfen kann. Sitze bestimmt schon n paar Stündchen an dem Problem.
Also: Gewisse Ereignisse sind über einen Zeitraum von ein paar Jahren geschehen. Diese sind per date in der Datenbank abgespeichert. Mein Problem ist, dass ich alle Ereignisse in dem jeweiligen Quartal anzeigen muss. Allerdings kann es auch vorkommen, dass gar kein Ereignis in einem Quartal stattgefunden hat. Wie kann ich es realisieren, dass auch die “leeren” Quartale angezeigt werden können? mit 0 oder so.
Für Tage hab ich es schon gefunden, wobei es da auch nur um die Anzeige aller Tage ging und nicht um die Verbindungen zwischen Zeit zu Ereignissen.
Vielleicht haben wir uns in der Tat nicht wirklich verstanden. Das könntest Du ändern, indem Du Dein Problem mal im Detail schilderst:
Tabellenaufbau
Beispieldaten
erwartetes Resultat
Außerdem kann generate_series() ja nur int annehmen und date - date ergibt zwar int, aber die Anzahl der Tage.
Und was ist da das Problem?
Oder geht das doch mit deinem Befehl?
test=*# select * from ereignisse ;
datum | ereigniss
------------+---------------------
2008-01-01 | Prost Neujahr!
2008-07-28 | begin Elternzeit
2009-01-01 | Prost Neujahr 2009!
(3 rows)
test=*# select * from (select extract(year from q) as jahr, extract(quarter from q) as quartal from (select '2007-01-01'::date+s*'3month'::interval as q from generate_Series(0,11)s)foo) bla left join ereignisse on ((jahr, quartal)=(extract(year from datum),extract(quarter from datum))) order by 1,2;
jahr | quartal | datum | ereigniss
------+---------+------------+---------------------
2007 | 1 | |
2007 | 2 | |
2007 | 3 | |
2007 | 4 | |
2008 | 1 | 2008-01-01 | Prost Neujahr!
2008 | 2 | |
2008 | 3 | 2008-07-28 | begin Elternzeit
2008 | 4 | |
2009 | 1 | 2009-01-01 | Prost Neujahr 2009!
2009 | 2 | |
2009 | 3 | |
2009 | 4 | |
(12 rows)
Falls ich Dich korrekt verstanden habe (dabei bin ich mir aber nicht sicher), hast Du eine Tabelle wie mein erstes Select zeigt und erwartest ein Resultat, wie es das zweite zeigt.
Das einzige, was jetzt noch nicht stimmt, ist,dass ich das älteste und jüngste (kann auch in der Zukunft liegen) Datum als Referenz nehmen muss. Also ich weisst nicht genau, ab wann das älteste Datum und wann das jüngste Datum ist.
Ach, und die Ereignisse und Daten dazu müssen nicht extra angegeben werden. Da reicht ein count für jedes Quartal.
mein problem war einfach, dass das Datum in der Datenbank nicht als Date abgespeichert wird (is nich von mir ^^). Deshalb musste ich es erst umwandeln.