В MySQL
:
SELECT CONCAT(span * 15, '-', span * 15 + 15), COUNT(*) AS cnt
FROM (
SELECT v.*, FLOOR(period / 15) AS span
FROM voice_calls v
) q
GROUP BY
span
UPDATE:
Решение, которое вы разместили, будет работать, при условии, что всегда будет более 5760 строк.
Но вам лучше создать фиктивный набор строк из 5760
строк и использовать его в OUTER JOIN
:
CREATE TABLE spans (span INT NOT NULL PRIMARY KEY);
INSERT
INTO spans
VALUES (0),
(1),
...
(5759)
SELECT span * 15, COUNT(*)
FROM spans
LEFT JOIN
calls
ON call.duration >= span * 15
AND call.duration < span * 15 + 15
GROUP BY
span
Это будет более эффективно и разумно, поскольку не может ни потерять (если меньше 5760
строк в calls
), ни занять много времени, если там миллионы строк.