В MySQL 8+ вы должны использовать оконные функции:
SELECT DATE_FORMAT(DATE(start), '%d/%m/%Y') As CallDate,
ch.did AS InboundNo,
COUNT(*) AS DayTotal,
SUM(COUNT(*)) OVER (PARTITION BY ch.did ORDER BY DATE(start)) as CumulativeCalls
FROM call_history ch LEFT JOIN
ast_queue_log aql
ON aql.event = 'ENTERQUEUE' AND aql.callid = ch.callid
WHERE ch.did = '01234567891' AND
start BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01') AND NOW()
GROUP BY ch.did, DATE(start)
ORDER BY ch.did;
Примечания:
- Подзапрос не требуется для
LEFT JOIN
. - Все столбцы должны быть уточнены. Из какой таблицы берется
start
? GROUP BY
и SELECT
согласованы с помощью DATE(start)
в операторе SELECT
.
В более старых версиях of MySQL, вам потребуются переменные и подзапрос:
SELECT dc.*,
(@s := @s + DayTotal) as CumulativeCalls
FROM (SELECT DATE_FORMAT(DATE(start), '%d/%m/%Y') As CallDate,
ch.did AS InboundNo,
COUNT(*) AS DayTotal
FROM call_history ch LEFT JOIN
ast_queue_log aql
ON aql.event = 'ENTERQUEUE' AND aql.callid = ch.callid
WHERE ch.did = '01234567891' AND
start BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01') AND NOW()
GROUP BY ch.did, DATE(start)
ORDER BY ch.did, DATE(start)
) dc CROSS JOIN
(SELECT @s := 0) params;