生成特定日期范围内的月份,包括空值
问题:
在 MySQL 中,即使某些月份不存在值,如何生成给定日期范围内所有月份的列表?
答案:
要实现此目的,请创建包含所有可能月份的单独表,例如:
CREATE TABLE dateTable ( myDate DATE NOT NULL, myYear SMALLINT NOT NULL, myMonth TINYINT UNSIGNED NOT NULL );
用您的数据中可能遇到的所有月份填充此表。
然后,使用 LEFT JOIN 组合您的原始数据表 myTable,带有 dateTable:
SELECT DT.myYear, DT.myMonth, AVG(myTable.value1) AS avg_value_1, AVG(myTable.value2) AS avg_value_2 FROM dateTable AS DT LEFT JOIN myTable ON DT.myDate = myTable.save_date WHERE DT.myDate BETWEEN '2009-01-01' AND '2009-07-01' GROUP BY DT.myYear, DT.myMonth
这将检索指定范围内所有月份的平均值,包括 myTable 中没有值的月份。 LEFT JOIN 通过将 DT.myDate 与 myTable 中的所有行匹配来确保包含空值,无论它们是否具有相应的值。
您可以通过调整 GROUP BY 子句对结果进行分组来进一步自定义输出所需的时间段,例如财务季度或一周中的几天。这种方法提供了一种便捷有效的方式来生成涵盖完整月份的综合报告。
以上是如何在 MySQL 中生成特定日期范围内的月份(包括空值)?的详细内容。更多信息请关注PHP中文网其他相关文章!