Hallo,
damit könnte man sich Testdaten generieren:
WITH cte AS
(
SELECT a2_ks, "Arbeitsplatz"
FROM (VALUES (1218, 'AP1'), (1218, 'AP2'), (1218, 'AP3'), (1218, 'AP4'), (1218, 'AP5'), (1218, 'Pool')
,(1220, 'AP11'), (1220, 'AP12'), (1220, 'AP13'), (1220, 'Pool')
) AS t (a2_ks, "Arbeitsplatz")
)
, "AGs" AS
(
SELECT a2_ks, "Arbeitsplatz", ag_nr, "AG"
FROM (VALUES (1218, 'AP1', 'AG25-01', 'Wartung'), (1218, 'AP1', 'AG25-02', 'Justage'), (1218, 'AP1', 'AG25-04', 'Reparatur'), (1218, 'AP1', 'AG25-011', 'Kalibrierung')
,(1218, 'AP2', 'AG25-012', 'Wartung'), (1218, 'AP2', 'AG25-022', 'Justage')
,(1218, 'Pool', 'AG25-46', 'Wartung'), (1218, 'Pool', 'AG25-47', 'Justage'), (1218, 'Pool', 'AG25-048', 'Reparatur'), (1218, 'Pool', 'AG25-049', 'Kalibrierung')
,(1218, 'AP3', 'AG25-050', 'Wartung'), (1218, 'AP4', 'AG25-051', 'Justage'), (1218, 'AP4', 'AG25-054', 'Reparatur'), (1218, 'AP5', 'AG25-05', 'Kalibrierung')
,(1220, 'AP11', 'AG25-023', 'Wartung'), (1220, 'AP11', 'AG25-024', 'Justage'), (1220, 'AP12', 'AG25-044', 'Reparatur'), (1220, 'AP13', 'AG25-045', 'Kalibrierung')
) AS t (a2_ks, "Arbeitsplatz", ag_nr, "AG")
--ORDER BY ag_nr
)
, dates AS
(
SELECT CASE WHEN "day" < CURRENT_DATE THEN 'Überfällig' ELSE "day"::VARCHAR END AS "day"
,EXTRACT(QUARTER FROM day)::int AS quarter
,EXTRACT(ISODOW FROM day)::int AS isodow
,EXTRACT(WEEK FROM day)::int AS week
,EXTRACT(YEAR FROM day)::int AS year
,CONCAT(EXTRACT(YEAR FROM day)::TEXT, LPAD(EXTRACT(WEEK FROM day)::TEXT, 2, '0')) AS "KW"
,min(to_date(CONCAT(EXTRACT(YEAR FROM day)::TEXT, EXTRACT(WEEK FROM day)::TEXT), 'iyyyiw'::text)) OVER (PARTITION BY CONCAT(EXTRACT(YEAR FROM day)::TEXT, EXTRACT(WEEK FROM day)::TEXT)) AS week_start_date
,(max(to_date(CONCAT(EXTRACT(YEAR FROM day)::TEXT, EXTRACT(WEEK FROM day)::TEXT), 'iyyyiw'::text)) OVER (PARTITION BY CONCAT(EXTRACT(YEAR FROM day)::TEXT, EXTRACT(WEEK FROM day)::TEXT)) + '6 days'::interval)::date AS week_end_date
FROM pg_catalog.generate_series((now() - '14 days'::interval), now() + '14 days'::interval, '1 days'::interval) AS "day"
ORDER BY year, quarter, week
)
, _groups AS
(
SELECT "KW"
,"day"
,week_start_date
,week_end_date
,a2_ks
,"Arbeitsplatz"
FROM cte
,dates
)
SELECT "KW"
,"day"
,week_start_date
,week_end_date
,_groups.a2_ks
,_groups."Arbeitsplatz"
,ag_nr
,"AG"
FROM _groups
JOIN "AGs" a ON a.a2_ks = _groups.a2_ks AND a."Arbeitsplatz" = _groups."Arbeitsplatz"
ORDER BY "KW","day",a2_ks,"Arbeitsplatz",ag_nr, "AG"
LG!
Eva…