Hallo zusammen,
ich erstelle gerade eine App wo man sehen kann wann Mitarbeiter krank sind/waren.
So soll das aussehen:
|nummer|name |krank_tage|au_intern|unfall|covid|abteilung |erster_tag|letzer_tag|
|308 |Maier|NULL |NULL |3.7 |NULL |Elektriker|20250916 |20250919 |
So sieht’s aus:
|nummer|name |krank_tage|au_intern|unfall|covid|abteilung |erster_tag|letzer_tag|
|308 |Maier|NULL |NULL |3.7 |NULL |Elektriker|20250916 |20250930 |
Man kann in der App das Datum eingrenzen, von bis, und da liegt mein Problem, ich weiß nicht wie ich der Abfrage beibringen kann daß in der Spalte “erster_tag” und “letzter_tag” nur das tatsächliche Datum wann er krank war auch angezeigt wird.
So sieht die Abfrage aus:
Hier suche ich nach dem MA 308 und das Datum 16.09.25 - 30.09.25, dieser MA war auch krank vom 16.09.25 - 19.09.25, aber als Ergebnis bekomme ich bei “letzter_tag” den 30.09.25
SELECT zbpenr as nummer,
psnavo||' '||psnafa as name,
SUM(CAST(CAST(NULLIF(ZBKRKT,0) AS VARCHAR(50)) AS DOUBLE PRECISION)) as krank_tage,
SUM(CAST(CAST(NULLIF(ZBSON2,0) AS VARCHAR(50)) AS DOUBLE PRECISION))/MAX(zbreaz) as au_intern,
SUM(CAST(CAST(NULLIF(ZBSON3,0) AS VARCHAR(50)) AS DOUBLE PRECISION))/MAX(zbreaz) as unfall,
SUM(CAST(CAST(NULLIF(ZBSON4,0) AS VARCHAR(50)) AS DOUBLE PRECISION))/MAX(zbreaz) as covid,
SUM(CAST(CAST(NULLIF(ZBSON5,0) AS VARCHAR(50)) AS DOUBLE PRECISION))/MAX(zbreaz) as kind_krank,
a6beme as abteilung,
FIRST_VALUE(MIN(zbdat8)) OVER (PARTITION BY COUNT(zbpenr)) AS erster_tag,
LAST_VALUE(MAX(zbdat8)) OVER (PARTITION BY COUNT(zbpenr)) AS letzter_tag
FROM VEZEIT
inner join vepsta on zbfirm=psfirm and zbpenr=pspenr
inner join veabte on zbfirm=a6firm and psabte=a6abte
where zbpenr='308' and pseitm>'0' and psatd8='0' and zbdat8 between 20250916 and 20250930
and zbfirm='1' and psagrp='GW'
group by zbpenr,psnavo,psnafa,abteilung
order by zbpenr
vielleicht denke ich dabei zu kompliziert und ich sehe den Wald nicht vor lauter Bäume.
Danke und Gruß
Gregorio