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

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

Linda Hamilton
发布: 2025-01-23 16:47:09
原创
552 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板