您好我有一个小问题,我查询 mysql 并检索数据列表以进行 json 编码并绘制成图表(例如数量与日期轴)。但是 sql 正确地不返回没有数据的查询数据的日期。所以图表上缺少日期。
我在这里读到了一些人拒绝创建其他表格的工作只是为了填补空白。这不是我的选择。
我有一个解决方案,可以在查询中创建一个包含所有日期的数组。
有人可以建议一种将其压缩到我的多维查询结果数组的方法。希望通过某种聪明的 foreach 方式。
或者是否有一个我不确定的 SQL 函数可以填写空白日期?
我的查询目前看起来像:
SELECT SQL_CALC_FOUND_ROWS Date, SUM(call_answer) AS call_answer, SUM(call_busy) AS call_busy, SUM(call_noanswer) AS call_noanswer, SUM(call_notrec) as call_notrec
FROM (
SELECT * FROM (
SELECT substring(dateCreated, 1,10) AS Date, COUNT(id) as call_answer, 0 as call_busy, 0 as call_noanswer, 0 as call_notrec
FROM cdr
WHERE (company = '8346767432431') AND (dateCreated >= '2012-10-16' ) AND (dateCreated <= '2012-11-16' ) AND dialStatus = 'NORMAL_CLEARING' GROUP BY Date )
AS t_0
UNION
SELECT * FROM (
SELECT substring(dateCreated, 1,10) AS Date, 0 as call_answer, COUNT(id) as call_busy, 0 as call_noanswer, 0 as call_notrec
FROM cdr
WHERE (company = '8346767432431') AND (dateCreated >= '2012-10-16' ) AND (dateCreated <= '2012-11-16' ) AND dialStatus = 'USER_BUSY' GROUP BY Date )
AS t_1
UNION
SELECT * FROM (
SELECT substring(dateCreated, 1,10) AS Date, 0 as call_answer, 0 as call_busy, COUNT(id) as call_noanswer, 0 as call_notrec
FROM cdr
WHERE (company = '8346767432431') AND (dateCreated >= '2012-10-16' ) AND (dateCreated <= '2012-11-16' ) AND (dialStatus = 'ORIGINATOR_CANCEL' OR dialStatus = 'NO_USER_RESPONSE') GROUP BY Date )
AS t_2
UNION
SELECT * FROM (
SELECT substring(dateCreated, 1,10) AS Date, 0 as call_answer, 0 as call_busy, 0 as call_noanswer, COUNT(id) as call_notrec
FROM cdr
WHERE (company = '8346767432431') AND (dateCreated >= '2012-10-16' ) AND (dateCreated <= '2012-11-16' ) AND (dialStatus = 'UNALLOCATED_NUMBER' OR dialStatus = 'INVALID_NUMBER_FORMAT') GROUP BY Date )
AS t_3
)
AS t_total
GROUP BY Date;
所以已经很乱了。