Unterfunktion

heldchen

Benutzer
Beiträge
7
Hallo Zusammen,

habe viel quergelesen, aber der Kopf hängt da noch quer.
Bin leider Einsteiger in SQL aber möchte mich trotzdem durchkämpfen.
Folgende Ausgangsstellung:

Ich habe eine Tabelle Mitarbeiterzeiten. Hier wird jeden Tag an dem der Mitarbeiter da ist ein wert jedes von x Zeitkonten geschrieben.
Ich habe in der Tabelle also Für mitarbeiter id 1 heute den Eintrag wert 8 (stunden) und eine Spalte Kontostand. Dieser zählt natürlich täglich hoch und ist am Monats letzten der finale Stundenstand. Dasselbe mit den Arbeitstagen. einmal +1 jeden angemeldeten Tag und einmal die Summe die jeden dieser Tage um eins erhöht wird bis zum Monatsletzten.
Unterschied zwischen diesen Sätzen ist nur der Eintrag einer Kontennummer in der entsprechenden Spalte.
Wie stelle ich mir jetzt beide Werte des Mitarbeiters am Monatsletzten dar?

Mitarbeiter Alf hat am 31. auf Konto 1 einen Stand von 160 Stunden und auf Konto 2 einen Stand von 20 Tagen, in einer Zeile....

Danke euch schon einmal im voraus
IDDatumKontoWertKontostand
11.1.2024188
11.1.2024211
12.1.20241816
12.1.2024212

Hier möchte ich jetzt ein querie bauen welches mir ausspuckt Mitarbeiter ID 1 16 Stunden 2 Tage

Danke euch schonmal im Voraus.
 
Werbung:
Code:
postgres=# select * from heldchen ;
 konto | wert 
-------+------
     1 |    8
     2 |    1
     1 |    8
     2 |    1
(4 rows)

postgres=# select sum(wert) filter (where konto = 1) as stunden, sum(wert) filter(where konto = 2) as tage from heldchen ;
 stunden | tage 
---------+------
      16 |    2
(1 row)

postgres=#

Ich habe jetzt ID und Datum weggelassen. Die Abfrage passend um diese Felder zu erweitern überlasse ich Dir zur Übung. Jedenfalls - die Summen immer mitzuführen ist schlechter Stil - gewöhne Dir das ab, die lassen sich leicht berechnen - je Woche, Monat, Quartal, Jahr oder anderen Zeiträumen. Schaue Dir dazu Window-Funktionen auch noch einmal an.
 
Hi, danke für die schnelle Hilfe. Das ist leider eine gegebene Anwendung! Habe keinen Einfluss darauf. Will nur Stück für Stück für eigene Reports Daten direkt aus der Datenbank abgreifen
 
Das Datenmodell ist wirklich nicht so geil, die Abfrage ist daher wenig elegant.
Code:
SELECT    t0.*,
        t1.Kontostand AS kontostand_stunden,
        t2.Kontostand AS kontostand_tage
FROM    (

SELECT    ID,
        max(Datum) AS datum_monats_letzer
FROM    tabelle
GROUP BY ID,datepart(year,Datum),datepart(month,Datum)

        ) t0
INNER JOIN tabelle t1
ON        t0.ID = t1.ID
AND        t0.datum_monats_letzer = t1.Datum
AND        t1.Konto = 1
INNER JOIN tabelle t2
ON        t0.ID = t2.ID
AND        t0.datum_monats_letzer = t2.Datum
AND        t2.Konto = 2
Ich gehe dabei davon aus, das der Monatsletzte nicht zwangsläufig der letzte Arbeitstag im Monat sein muss.
 
Werbung:
Zurück
Oben