首页  >  文章  >  数据库  >  如何在 MySQL 中生成特定日期范围内的月份(包括空值)?

如何在 MySQL 中生成特定日期范围内的月份(包括空值)?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-31 22:59:291067浏览

How to Generate Months within a Specific Date Range in MySQL, Including Empty Values?

生成特定日期范围内的月份,包括空值

问题:

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn