Możesz użyć TIMESTAMPDIFF
grupować według przedziałów czasu:
Dla określonego przedziału godzin możesz użyć:
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
Zastąp wystąpienia 2012-08-03 00:00:00
z minimalną datą wprowadzenia.
2
godziny, 3
godzin itp.) i możesz zrobić to samo przez minuty:
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
Gdzie 45
minuty, 90
minut itp.).
Upewnij się, że podajesz minimalną datę wprowadzenia (w tym przykładzie 2012-08-03 00:00:00
) jako drugi parametr TIMESTAMPDIFF
.
EDYTUJ: Jeśli nie chcesz się martwić, którą jednostkę interwału wybrać w TIMESTAMPDIFF
funkcji, to oczywiście po prostu wykonaj interwał w sekundach (300 =5 minut, 3600 =1 godzina, 7200 =2 godziny itd.)
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: Aby zaadresować swój komentarz dotyczący zmniejszenia liczby obszarów w wyciągu, w których musisz przekazać swoją minimalną datę parametru, możesz użyć:
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
I po prostu przekaż swój parametr minimalnej daty i godziny do podselekcji sprzężenia.
Możesz nawet utworzyć drugą kolumnę w podselekcji łączenia dla swojego interwału sekund (np. 3600
) i nazwij kolumnę mniej więcej w stylu secinterval
... następnie zmień
s do b.secinterval
, więc wystarczy podać parametr minimalnej daty ORAZ interwał raz za każdym razem.