Sie können TIMESTAMPDIFF
nach Zeitintervallen gruppieren:
Für ein bestimmtes Stundenintervall können Sie Folgendes verwenden:
SELECT '2012-08-03 00:00:00' +
INTERVAL FLOOR(TIMESTAMPDIFF(HOUR, '2012-08-03 00:00:00', timestamp) / <n>) * <n> HOUR AS start_time,
COUNT(*) AS total
FROM event
WHERE timestamp >= '2012-08-03 00:00:00'
GROUP BY start_time
Ersetzen Sie die Vorkommen von 2012-08-03 00:00:00
mit Ihrem Mindesteingabedatum.
<n>
ist Ihr angegebenes Intervall in Stunden (alle 2
Stunden, 3
Stunden usw.), und Sie können dasselbe für Minuten tun:
SELECT '2012-08-03 00:00:00' +
INTERVAL FLOOR(TIMESTAMPDIFF(MINUTE, '2012-08-03 00:00:00', timestamp) / <n>) * <n> MINUTE AS start_time,
COUNT(*) AS total
FROM event
WHERE timestamp >= '2012-08-03 00:00:00'
GROUP BY start_time
Wobei <n>
ist Ihr angegebenes Intervall in Minuten (alle 45
Minuten, 90
Minuten usw.).
Stellen Sie sicher, dass Sie Ihr Mindesteingabedatum eingeben (in diesem Beispiel 2012-08-03 00:00:00
). ) als zweiten Parameter für TIMESTAMPDIFF
.
BEARBEITEN: Wenn Sie sich keine Gedanken darüber machen möchten, welche Intervalleinheit Sie in TIMESTAMPDIFF
auswählen sollen Funktion, dann natürlich nur das Intervall in Sekunden (300 =5 Minuten, 3600 =1 Stunde, 7200 =2 Stunden usw.)
SELECT '2012-08-03 00:00:00' +
INTERVAL FLOOR(TIMESTAMPDIFF(SECOND, '2012-08-03 00:00:00', timestamp) / <n>) * <n> SECOND AS start_time,
COUNT(*) AS total
FROM event
WHERE timestamp >= '2012-08-03 00:00:00'
GROUP BY start_time
EDIT2: Um Ihren Kommentar bezüglich der Verringerung der Anzahl der Bereiche in der Anweisung zu adressieren, in denen Sie Ihr Mindestparameterdatum übergeben müssen, können Sie Folgendes verwenden:
SELECT b.mindate +
INTERVAL FLOOR(TIMESTAMPDIFF(SECOND, b.mindate, timestamp) / <n>) * <n> SECOND AS start_time,
COUNT(*) AS total
FROM event
JOIN (SELECT '2012-08-03 00:00:00' AS mindate) b ON timestamp >= b.mindate
GROUP BY start_time
Und übergeben Sie einfach Ihren minimalen Datetime-Parameter einmal in die Join-Unterauswahl.
Sie können sogar eine zweite Spalte in der Join-Unterauswahl für Ihr Sekundenintervall erstellen (z. B. 3600
) und nennen Sie die Spalte etwa so wie secinterval
... dann ändern Sie den <n>
's zu b.secinterval
, also müssen Sie Ihren minimalen Datumsparameter UND das Intervall jeweils nur einmal übergeben.