Du kan använda TIMESTAMPDIFF
att gruppera efter tidsintervall:
För ett specificerat intervall på timmar kan du använda:
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
Ersätt förekomsterna av 2012-08-03 00:00:00
med ditt lägsta inmatningsdatum.
2
timmar, 3
timmar, etc.), och du kan göra detsamma i minuter:
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
Där
är ditt angivna intervall i minuter (varje 45
minuter, 90
minuter, etc).
Se till att du anger ditt lägsta inmatningsdatum (i det här exemplet 2012-08-03 00:00:00
) som den andra parametern till TIMESTAMPDIFF
.
EDIT: Om du inte vill oroa dig för vilken intervallenhet du ska välja i TIMESTAMPDIFF
funktion, så gör du naturligtvis bara intervallet i sekunder (300 =5 minuter, 3600 =1 timme, 7200 =2 timmar, etc.)
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: För att ta itu med din kommentar om att minska antalet områden i uttalandet där du måste skicka in ditt lägsta parameterdatum, kan du använda:
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
Och skriv helt enkelt in din lägsta datetime-parameter en gång till undervalet join.
Du kan till och med göra en andra kolumn i anslutningsundervalet för ditt sekunders intervall (t.ex. 3600
) och namnge kolumnen något som sekundsintervall
... ändra sedan b.secinterval
, så du behöver bara skicka in din minsta datumparameter OCH intervall en gång vardera.