Gemini‐Chat ‐ SQL mit Aggregation pro Stunde - roger-infanger-weibel/cas-hzw-ai-innovation GitHub Wiki

Input

SQL View

Eine View, welche mit folgenden SQL hinterlegt ist, liefert konsolidierte Daten pro Stunde.

WITH StuendlicheDaten AS (
    -- Schritt 1: 15-Minuten-Werte pro Parkhaus und Stunde aggregieren
    SELECT 
        day AS datum,
        weekday(day) as wochentag,
        month(day) as monat,
        city,
        id,
        name,
        HOUR(fetch_ts) AS stunde,
        -- Berechnung der durchschnittlichen Belegung in Prozent pro Stunde
        AVG(((total - free) / total) * 100) AS avg_belegung_prozent
    FROM 
        pls_fetch_current
    WHERE 
        day >= '2026-06-01'
        AND total > 0 -- Verhindert Division durch 0, falls Datenfehler vorliegen
    GROUP BY 
        day, 
        weekday(day),
    	month(day),
        city,
        id,
        name,
        HOUR(fetch_ts)
),
SymbolischeDaten AS (
    -- Schritt 2: Prozentwerte in SAX-Symbole übersetzen
    SELECT 
        city,

        id,
        name,
        monat,
        wochentag,
        datum,
        stunde,
        CASE 
            WHEN avg_belegung_prozent BETWEEN 0 AND 20 THEN 'A'
            WHEN avg_belegung_prozent BETWEEN 21 AND 50 THEN 'B'
            WHEN avg_belegung_prozent BETWEEN 51 AND 80 THEN 'C'
            ELSE 'D' -- 81% bis 100% Belegung
        END AS symbol
    FROM 
        StuendlicheDaten
)
-- Schritt 3: Die Symbole pro Parkhaus und Tag zu einer Zeichenkette zusammenfügen
SELECT 
        city,
        id,
        name,
        monat,
        wochentag,
        datum,
	    name,
GROUP_CONCAT(symbol ORDER BY stunde SEPARATOR '') AS sax_string,
    LENGTH(GROUP_CONCAT(symbol ORDER BY stunde SEPARATOR '')) AS sax_string_len
FROM 
    SymbolischeDaten
GROUP BY 
    datum,
    city,
    id,
    name
-- Filtert unvollständige Tage heraus (nur Tage mit exakt 24 Stunden)
HAVING 
    sax_string_len = 24
ORDER BY 
    datum,
    city,
    name;

Output

CSV Sample Record

"city","id","name","monat","wochentag","datum","sax_string","sax_string_len"
"basel","baselparkhausaeschen","Aeschen","6","0","2026-06-01","AAAAAABBBBBBBBBBAAAAAAAA","24"
"basel","baselparkhausanfos","Anfos","6","0","2026-06-01","DDDDDABBCCCCCCCBBAAADDDD","24"
"basel","baselparkhausbadbahnhof","Bad. Bahnhof","6","0","2026-06-01","CCCCCCCCCCCCCCCCCCCCCCCC","24"
"basel","baselparkhausbahnhofsued","Bahnhof Süd","6","0","2026-06-01","AAAAABBDDBCCCBBBBBAAAAAA","24"
"basel","baselparkhauscentralbahn","Centralbahn","6","0","2026-06-01","DDDAABBBBBCBBBBBBAAAADDD","24"

JSON Sample Records

[
{"type":"header","version":"5.2.3","comment":"Export to JSON plugin for phpMyAdmin"},
{"type":"database","name":"ph_fetch"},
{"type":"table","name":"view_parkhaus_sax_strings","database":"ph_fetch","data":
[
{"city":"basel","id":"baselparkhausaeschen","name":"Aeschen","monat":"6","wochentag":"0","datum":"2026-06-01","sax_string":"AAAAAABBBBBBBBBBAAAAAAAA","sax_string_len":"24"},
{"city":"basel","id":"baselparkhausanfos","name":"Anfos","monat":"6","wochentag":"0","datum":"2026-06-01","sax_string":"DDDDDABBCCCCCCCBBAAADDDD","sax_string_len":"24"},
{"city":"basel","id":"baselparkhausbadbahnhof","name":"Bad. Bahnhof","monat":"6","wochentag":"0","datum":"2026-06-01","sax_string":"CCCCCCCCCCCCCCCCCCCCCCCC","sax_string_len":"24"},
{"city":"zurich","id":"zuerichparkhauszueri11shopping","name":"Züri 11 Shopping","monat":"6","wochentag":"1","datum":"2026-06-30","sax_string":"DDDDDDDDDDDDDDDDDDDDDDDD","sax_string_len":"24"},
{"city":"zurich","id":"zuerichparkhauszuerichhorn","name":"Zürichhorn","monat":"6","wochentag":"1","datum":"2026-06-30","sax_string":"CCCCDDDDDDDDDDDDDDDCCCCC","sax_string_len":"24"}
]
}
]

Analyse

Gemini-Chat (grob)

Spannende Erkenntnisse aus der Grafik:

  • Der Berufsverkehr-Effekt: In allen Städten schnellen die Kurven ab 05:00 bzw. 06:00 Uhr morgens rasant in die Höhe, da die Pendler in die Städte strömen.
  • Mittagsspitze vs. Plateau: Während Zürich über den gesamten Mittag (11:00 bis 13:00 Uhr) das höchste relative Belegungsniveau erreicht, zeigen Bern und Luzern einen sehr synchronen Verlauf mit einem Peak am frühen Nachmittag (ca. 14:00 Uhr).
  • Basel als Frühaufsteher: Die Parkhäuser in Basel füllen sich morgens deutlich schneller als jene in Bern und Luzern, leeren sich dafür aber ab 13:00 Uhr auch wesentlich früher und konsequenter.
  • Nachtaktivität: Zürich behält auch nachts (22:00 bis 04:00 Uhr) das mit Abstand höchste relative Belegungsniveau im Vergleich zu den anderen Städten.

Details: https://docs.google.com/document/d/1giw6wydGdABdATCAylkz93jF0zI32LIuTYA78TmUvVM/edit?tab=t.0