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:
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,000694fü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.SYSTIMESTAMPvsSYSDATE: Wenn deine Spalte vom TypTIMESTAMPist, solltest duSYSTIMESTAMPverwenden. Die Differenz ist dann einINTERVAL, welches du mitEXTRACTumwandeln musst, was etwas komplexer ist. Für die meisten Fälle reicht dieSYSDATE-Methode völlig aus.
Alternative: Gruppierung in 5-Minuten-Intervalle
Falls du "gröbere" Blöcke brauchst, kannst du das Ergebnis einfach teilen:
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:
Kommentar veröffentlichen