Erweitere die Datenbank

This commit is contained in:
2025-06-19 14:18:21 +02:00
parent a9c455381d
commit a964663f51
2 changed files with 142 additions and 121 deletions
+35 -31
View File
@@ -2,44 +2,48 @@
-- DROP TABLE public."Arbeitszeiten";
create table public."Arbeitszeiten"
(
"Datum" date not null,
"Arbeitszeit" interval(6) null,
"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") as
select
to_char(date_trunc('week'::text, "Arbeitszeiten"."Datum"::timestamp with time zone),
'TMYYYY#WW'::text) as "Woche",
sum("Arbeitszeiten"."Arbeitszeit") as "Gesamtarbeitszeit",
count("Arbeitszeiten"."Datum") as "Arbeitstage",
sum("Arbeitszeiten"."Arbeitszeit") - count("Arbeitszeiten"."Datum") ::double precision * '08:00:00'::interval as "Überstunden"
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));
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") as
select
to_char(date_trunc('month'::text, "Arbeitszeiten"."Datum"::timestamp with time zone),
'TMYYYY TMMonth'::text) as "Monat",
sum("Arbeitszeiten"."Arbeitszeit") as "Gesamtarbeitszeit",
count("Arbeitszeiten"."Datum") as "Arbeitstage",
sum("Arbeitszeiten"."Arbeitszeit") - count("Arbeitszeiten"."Datum") ::double precision * '08:00:00'::interval as "Überstunden"
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));
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") as
select
date_part('year'::text, "Arbeitszeiten"."Datum")::text as "Jahr",
sum("Arbeitszeiten"."Arbeitszeit") as "Gesamtarbeitszeit",
count("Arbeitszeiten"."Datum") as "Arbeitstage",
sum("Arbeitszeiten"."Arbeitszeit") - count("Arbeitszeiten"."Datum") ::double precision * '08:00:00'::interval as "Überstunden"
from "Arbeitszeiten"
group by (date_part('year'::text, "Arbeitszeiten"."Datum"))
order by (date_part('year'::text, "Arbeitszeiten"."Datum"));
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"));