Als je het echt in mysql wilt doen, zou dit tot op zekere hoogte moeten werken - afhankelijk van hoe je je intervallen van 15 minuten wilt organiseren. Ik heb de output gegeven als time from | time to | number of reports
omdat ik denk dat het zinloos en zelfs een beetje bedrieglijk is om een specifieke tijdstempel uit te voeren en er een telling van een tijdbereik aan te koppelen.
SELECT CONCAT (
lpad(hours.a, 2, "0"),
":",
lpad(minutes.a * 15, 2, "0"),
":00"
) AS 'from',
CONCAT (
lpad(hours.a, 2, "0"),
":",
lpad((minutes.a * 15) + 14, 2, "0"),
":59"
) AS 'to',
count(r.id)
FROM (
SELECT 0 AS a
UNION
SELECT 1 AS a
UNION
SELECT 2 AS a
UNION
SELECT 3 AS a
UNION
SELECT 4 AS a
UNION
SELECT 5 AS a
UNION
SELECT 6 AS a
UNION
SELECT 7 AS a
UNION
SELECT 8 AS a
UNION
SELECT 9 AS a
UNION
SELECT 10 AS a
UNION
SELECT 11 AS a
UNION
SELECT 12 AS a
UNION
SELECT 13 AS a
UNION
SELECT 14 AS a
UNION
SELECT 15 AS a
UNION
SELECT 16 AS a
UNION
SELECT 17 AS a
UNION
SELECT 18 AS a
UNION
SELECT 19 AS a
UNION
SELECT 20 AS a
UNION
SELECT 21 AS a
UNION
SELECT 22 AS a
UNION
SELECT 23 AS a
) hours
INNER JOIN (
SELECT 0 AS a
UNION
SELECT 1 AS a
UNION
SELECT 2 AS a
UNION
SELECT 3 AS a
) minutes
LEFT JOIN reports r ON hours.a = hour(r.t)
AND minutes.a = floor(minute(r.t) / 15)
GROUP BY hours.a,
minutes.a;