Jika Anda benar-benar ingin melakukannya di mysql, ini akan bekerja sampai batas tertentu - tergantung pada bagaimana Anda ingin mengatur interval 15 menit Anda. Saya telah memberikan output sebagai time from | time to | number of reports
karena menurut saya tidak ada artinya dan bahkan sedikit menipu untuk menampilkan stempel waktu tertentu dan mengaitkan hitungan rentang waktu dengannya.
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;