在做报表数据统计的时候,用一个折线图用来显示并统计最近 6 个月内的数据结算情况。为了前端小伙伴方便处理数据,需要将没有数据的月份默认填充为 0。
网上查了很久,最终找到了解决办法,写出来分享一下,希望能够帮助到大家。
1、初始化最近的 6 个月份
SELECT
CONVERT (t2.year_month_str, CHAR) 时间戳
FROM
(
SELECT
@rownum :=@rownum + 1 AS num,
date_format(
DATE_SUB(now(), INTERVAL @rownum MONTH),
'%Y/%m'
) AS year_month_str
FROM
(SELECT @rownum := - 1) AS r_init,
(
SELECT
c.id
FROM
yecaishui_tax_return_table_common_items c
LIMIT 6
) AS c_init
) t2
GROUP BY
t2.year_month_str
yecaishui_tax_return_table_common_items
是库中的一个常量表,只要其中的数据记录数大于 6 即可,LIMIT 6
限制查询的条数。下面是执行结果
2、通过 LEFT JOIN 关键字关联查询的数据表
SELECT
IFNULL(SUM(i.total), 0.00) AS statementTotalMoney,
IFNULL(SUM(i.taal_open), 0.00) AS statementSettledMoney,
CONVERT (t2.year_month_str, CHAR) `timeStamp`
FROM
(
SELECT
@rownum :=@rownum + 1 AS num,
date_format(
DATE_SUB(now(), INTERVAL @rownum MONTH),
'%Y/%m'
) AS year_month_str
FROM
(SELECT @rownum := - 1) AS r_init,
(
SELECT
c.id
FROM
yecaishui_tax_return_table_common_items c
LIMIT 6
) AS c_init
) t2
LEFT JOIN yecaishui_income_statement AS i ON (
CONCAT(
DATE_FORMAT(i.gmt_create, '%Y'),
'/',
DATE_FORMAT(i.gmt_create, '%m')
) = t2.year_month_str
AND i.delete_flag = 0
)
GROUP BY
t2.year_month_str
... = t2.year_month_str
表示将库中的时间字段格式化后与月份进行关联。查询结果如下