Urlaubsplaner erstellen anhand Von und Bis Datum

Hallo Ich habe folgende Aufgabenstellung.

Ich soll eine Urlaubsmatrix erstellen , wann welche Mitabeiter im Urlaub sind. Dazu habe ich pro Mitarbeiter einen Datensatz in dem steht z.B
Meier Urlaub von 25.06.2010 bis 06.07.10
Bauer Urlaub vom 3.07…2010 bis 02.08.2010 usw.

Nun soll ich eine Matrix erstellen die folgender maßen aussieht.

Name 1.7 2.7 3.7 4.7 5.7 6.7 .bis zum 2.8
Meier U U U U U U
Bauer U U U usw.

Meine jetzige Matrix sieht aber so aus. Das ich nur am jeweiligem Datum d.h am Vom Datum und am Bis Datum ein Eintrag stehen habe, nicht aber für den kompletten Zeitraum

Monat 3.7 6.7 2.8
Meier U
Bauer U U

Wie kann ich es ralisieren dass ich die erste Matrix erstellen kann. Ich brauche irgendwelche Dummy informationen .
Vielen Dank

Läuft letztendlich auf http://www.pg-forum.de/h-ufig-gestellte-fragen-faq/4067-faq-zeilen-zu-spalten.html hinaus.

Für Dich könnte außerdem Temporal PostgreSQL Roadmap interessant sein, mit diesen neuen temporalen Datentyp und PostgreSQL 9.0 mit Exlusion Constraints könntest Du z.B. absichern, daß keine Urlauber sich überlappen, die sich vertreten müssen.

Andreas

Hallo,

ich hatte mal eine ähnliche Aufgabenstellung, jedoch ging es dabei um Kalenderwochen zwischen zwei Daten - aber das Prinzip ist das gleiche.

Du erstellst eine Funktion in plpgsql die ein End- und ein Anfangsdatum als Parameter entgegennimmt. In dieser Funktion wird über alle Tage dieses Intervalls iteriert. Die Funktion liefert dann Datensätze mit dem jeweiligen Tagesdatum und dem Namen des Urlaubers. Stichwort hier: “set returning function”.

Ich hoffe, das hilft Dir weiter.

Danke ich werde das mal ausprobieren

Das geht auch ohne Funktion:

test=*# select * from urlaub ;
     wer     |    von     |    bis
-------------+------------+------------
 akretschmer | 2010-07-01 | 2010-07-05
 ads         | 2010-07-03 | 2010-07-08
(2 rows)

test=*# select '2010-07-01'::date+s*'1day'::interval as datum, array_agg(urlaub.wer) as urlauber from generate_Series(0,10) s, urlaub where '2010-07-01'::date+s*'1day'::interval between von and bis group by 1 order by 1;
        datum        |     urlauber
---------------------+-------------------
 2010-07-01 00:00:00 | {akretschmer}
 2010-07-02 00:00:00 | {akretschmer}
 2010-07-03 00:00:00 | {akretschmer,ads}
 2010-07-04 00:00:00 | {akretschmer,ads}
 2010-07-05 00:00:00 | {akretschmer,ads}
 2010-07-06 00:00:00 | {ads}
 2010-07-07 00:00:00 | {ads}
 2010-07-08 00:00:00 | {ads}
(8 rows)

Andreas