-- # Definition der Tabelle -- DROP TABLE public."Arbeitszeiten"; create table public."Arbeitszeiten" ( "Datum" date not null, "Arbeitszeit" interval(6) null, "HomeOffice" boolean default FALSE not null, constraint "Arbeitszeiten_pkey" primary key ("Datum") ); -- # Definition der Ansichten -- ## Wöchentlich create view "Arbeitszeiten - Woche" ("Woche", "Gesamtarbeitszeit", "Arbeitstage", "Überstunden", "Home-Office-Tage") as select to_char(date_trunc('week'::text, "Arbeitszeiten"."Datum"::timestamp with time zone), 'TMYYYY#WW'::text) as "Woche", sum("Arbeitszeiten"."Arbeitszeit")::interval AS "Gesamtarbeitszeit", count("Arbeitszeiten"."Datum")::bigint AS "Arbeitstage", (sum("Arbeitszeiten"."Arbeitszeit") - ((count("Arbeitszeiten"."Datum"))::double precision * '08:00:00'::interval)) AS "Überstunden", (count(*) filter (where "Arbeitszeiten"."HomeOffice"))::int as "Home-Office-Tage" from "Arbeitszeiten" group by (date_trunc('week'::text, "Arbeitszeiten"."Datum"::timestamp with time zone)) order by (date_trunc('week'::text, "Arbeitszeiten"."Datum"::timestamp with time zone)); -- ## Monatlich create view "Arbeitszeiten - Monat" ("Monat", "Gesamtarbeitszeit", "Arbeitstage", "Überstunden", "Home-Office-Tage") as select to_char(date_trunc('month'::text, "Arbeitszeiten"."Datum"::timestamp with time zone), 'TMYYYY TMMonth'::text) as "Monat", sum("Arbeitszeiten"."Arbeitszeit")::interval AS "Gesamtarbeitszeit", count("Arbeitszeiten"."Datum")::bigint AS "Arbeitstage", (sum("Arbeitszeiten"."Arbeitszeit") - ((count("Arbeitszeiten"."Datum"))::double precision * '08:00:00'::interval)) AS "Überstunden", (count(*) filter (where "Arbeitszeiten"."HomeOffice"))::int as "Home-Office-Tage" from "Arbeitszeiten" group by (date_trunc('month'::text, "Arbeitszeiten"."Datum"::timestamp with time zone)) order by (date_trunc('month'::text, "Arbeitszeiten"."Datum"::timestamp with time zone)); -- ## Jährlich create view "Arbeitszeiten - Jahr"("Jahr", "Gesamtarbeitszeit", "Arbeitstage", "Überstunden", "Home-Office-Tage") as select date_part('year'::text, "Arbeitszeiten"."Datum")::text as "Jahr", sum("Arbeitszeiten"."Arbeitszeit")::interval AS "Gesamtarbeitszeit", count("Arbeitszeiten"."Datum")::bigint AS "Arbeitstage", (sum("Arbeitszeiten"."Arbeitszeit") - ((count("Arbeitszeiten"."Datum"))::double precision * '08:00:00'::interval)) AS "Überstunden", (count(*) filter (where "Arbeitszeiten"."HomeOffice"))::int as "Home-Office-Tage" from "Arbeitszeiten" group by (date_part('year'::text, "Arbeitszeiten"."Datum")) order by (date_part('year'::text, "Arbeitszeiten"."Datum"));