首页 >数据库 >mysql教程 >如何用零值填充 MySQL 范围中的缺失日期?

如何用零值填充 MySQL 范围中的缺失日期?

Linda Hamilton
Linda Hamilton原创
2025-01-23 16:47:09601浏览

How to Fill Missing Dates in a MySQL Range with Zero Values?

MySQL日期范围填充缺失值

假设您有一个包含两列(日期和分数)的表,您希望填充缺失日期以获得连续的值序列。例如,如果您的表当前包含以下数据:

<code>日期      分数
-----------------
2010-08-01  19
2010-08-02  21
2010-08-04  14
2010-08-07  10
2010-08-10  14</code>

您希望用0填充缺失的日期(2010-08-03、2010-08-05和2010-08-06),以获得以下结果:

<code>日期      分数
-----------------
2010-08-01  19
2010-08-02  21
2010-08-03  0
2010-08-04  14
2010-08-05  0
2010-08-06  0
2010-08-07  10
2010-08-10  14</code>

为了实现这一点,您可以使用以下查询:

<code class="language-sql">SELECT x.ts AS timestamp,
       COALESCE(y.score, 0) AS cnt
FROM (SELECT DATE_ADD('2010-06-06', INTERVAL n.id - 1 DAY) AS ts
        FROM numbers n
       WHERE DATE_ADD('2010-06-06', INTERVAL n.id -1 DAY) < '2010-08-11') x
LEFT JOIN your_table y ON DATE(x.ts) = DATE(y.date);</code>

以下是查询的细分:

  • 创建一个带有自动递增值的数字表(numbers)。
  • 使用DATE_ADD从指定的起始日期(示例中为'2010-06-06')构造日期列表,并根据numbers表中数字的id递增天数。
  • 使用LEFT JOIN根据日期部分将日期列表与您的原始表y合并。
  • 使用COALESCE将y.score中的任何空值替换为0。
  • 如果需要,可以使用DATE_FORMAT更改日期格式。

请将your_table替换为您实际的表名。 确保您有一个名为numbers的表,其中包含一个名为id的自动递增列,该列包含从1开始的连续整数。 如果没有,您需要先创建一个。 例如: CREATE TABLE numbers (id INT AUTO_INCREMENT PRIMARY KEY); 然后插入足够数量的记录以覆盖您的日期范围。

以上是如何用零值填充 MySQL 范围中的缺失日期?的详细内容。更多信息请关注PHP中文网其他相关文章!

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