Dienstag, 7. April 2026

Oracle SQL: Gruppieren nach Minuten

 Das ist eine klassische Anforderung für Monitoring-Dashboards oder zeitkritische Analysen. Um in Oracle SQL die Differenz in Minuten zu berechnen und danach zu gruppieren, nutzt du am besten die Subtraktion von Zeitstempeln.

In Oracle ergibt SYSDATE - dein_datum die Differenz in Tagen. Um auf Minuten zu kommen, multiplizieren wir das Ergebnis mit 1440 (24 Stunden * 60 Minuten).

Die Lösung

Hier ist die Abfrage, wie du die Datensätze nach den vergangenen Minuten gruppierst:

SQL
SELECT 
    FLOOR((SYSDATE - dein_datum_spalte) * 24 * 60) AS minuten_her,
    COUNT(*) AS anzahl
FROM 
    deine_tabelle
WHERE 
    dein_datum_spalte <= SYSDATE -- Nur Daten aus der Vergangenheit
GROUP BY 
    FLOOR((SYSDATE - dein_datum_spalte) * 24 * 60)
ORDER BY 
    minuten_her ASC;

Erläuterung der Funktionen

  • SYSDATE - dein_datum_spalte: Berechnet die Differenz als Dezimalzahl (z. B. 0,000694 für eine Minute).

  • * 24 * 60: Rechnet den Tageswert in Minuten um.

  • FLOOR(...): Rundet auf die nächste ganze Zahl ab. Das ist wichtig für die Gruppierung, damit alle Sekundenwerte innerhalb derselben Minute (z. B. 1,2 Min und 1,8 Min) in den Topf "1 Minute" fallen.

  • SYSTIMESTAMP vs SYSDATE: Wenn deine Spalte vom Typ TIMESTAMP ist, solltest du SYSTIMESTAMP verwenden. Die Differenz ist dann ein INTERVAL, welches du mit EXTRACT umwandeln musst, was etwas komplexer ist. Für die meisten Fälle reicht die SYSDATE-Methode völlig aus.

Alternative: Gruppierung in 5-Minuten-Intervalle

Falls du "gröbere" Blöcke brauchst, kannst du das Ergebnis einfach teilen:

SQL
SELECT 
    FLOOR((SYSDATE - dein_datum_spalte) * 1440 / 5) * 5 AS minuten_block,
    COUNT(*)
FROM deine_tabelle
GROUP BY FLOOR((SYSDATE - dein_datum_spalte) * 1440 / 5) * 5;

Möchtest du die Ergebnisse für einen bestimmten Zeitraum einschränken (z. B. nur die letzten 60 Minuten), oder passt die minütliche Aufteilung so für dich?

Keine Kommentare: