您可以使用 MySQL 的 LEFT JOIN
和 COALESCE
函数来统计一个月的数据并显示缺失日期为 0。以下是一个示例查询,它获取 2021 年 7 月每天的数据:
SELECT DATE_FORMAT(dates.date, '%Y-%m-%d') AS date,
COALESCE(SUM(data_table.value), 0) AS total_value
FROM (
SELECT DATE('2021-07-01') + INTERVAL (t4 + t16 + t64 + t256) DAY AS date
FROM (SELECT 0 AS t4 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) AS T4,
(SELECT 0 AS t16 UNION SELECT 4 UNION SELECT 8 UNION SELECT 12) AS T16,
(SELECT 0 AS t64 UNION SELECT 16 UNION SELECT 32 UNION SELECT 48) AS T64,
(SELECT @counter := @counter +1 FROM information_schema.tables, (SELECT @counter:= -1) as counter LIMIT 256)
WHERE DATE('2021-07-01') + INTERVAL (t4 + t16 + t64 + t256) DAY <= LAST_DAY('2021-07-01')
) dates
LEFT JOIN data_table ON DATE(dates.date) = DATE(data_table.date_field)
WHERE YEAR(dates.date) = '2021' AND MONTH(dates.date) = '07'
GROUP BY dates.date;
在上面的查询中,您需要将 data_table
替换为实际表名,并将 date_field
和 value
替换为实际表中的字段名称。
这个查询会生成一个包含所有日期(从指定月份的第一天到最后一天)的日期表。然后,使用 LEFT JOIN
将此表连接到数据表上,并使用 COALESCE
函数将缺失日期的值设置为 0。
希望这可以帮助到您!