Du kan bruge TIMESTAMPDIFF
at gruppere efter tidsintervaller:
For et specificeret interval på timer kan du bruge:
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
Erstat forekomsterne af 2012-08-03 00:00:00
med din minimumsindtastningsdato.
2
timer, 3
timer osv.), og du kan gøre det samme i minutter:
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
Hvor 45
minutter, 90
minutter osv.).
Sørg for, at du indtaster din minimumsindtastningsdato (i dette eksempel 2012-08-03 00:00:00
) som den anden parameter til TIMESTAMPDIFF
.
EDIT: Hvis du ikke vil bekymre dig om, hvilken intervalenhed du skal vælge i TIMESTAMPDIFF
funktion, så laver du selvfølgelig bare intervallet i sekunder (300 =5 minutter, 3600 =1 time, 7200 =2 timer osv.)
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: For at adressere din kommentar vedrørende reduktion af antallet af områder i erklæringen, hvor du skal passere din minimumsparameterdato, kan du bruge:
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
Og indsend blot din minimum datetime-parameter én gang i join-undervalget.
Du kan endda lave en anden kolonne i join-undervalget for dit sekunders interval (f.eks. 3600
) og navngiv kolonnen noget som sekundinterval
... skift derefter b.secinterval
, så du skal kun indtaste din minimumsdatoparameter OG interval én gang hver.