首页 > 数据库 > mysql教程 > 如何填充 MySQL 查询中两个日期之间缺失的日期?

如何填充 MySQL 查询中两个日期之间缺失的日期?

Barbara Streisand
发布: 2024-12-16 22:14:13
原创
530 人浏览过

How to Populate Missing Dates in MySQL Queries Between Two Dates?

在 MySQL 中检索两个日期之间的数据时填充缺失的日期

在 MySQL 中,当使用 BETWEEN 运算符选择两个日期之间的数据时,它是指定范围内的某些日期可能没有任何对应数据。这可能会导致查询结果中出现空行或缺失行。

问题陈述:

考虑一个名为“tbl”的表,其中包含与日期关联的数据,如下所示:

Date Data
2009-06-25 75
2009-07-01 100
2009-07-02 120

如果我们想检索 '2009-06-25' 到 '2009-06-25' 之间的所有数据'2009-07-01' 使用以下查询:

SELECT data FROM tbl WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
登录后复制

查询将仅返回现有数据在指定范围内的行。这意味着没有任何数据的日期,例如“2009-06-26”、“2009-06-27”和“2009-06-28”,将从结果中省略。

解决方案:用于填充缺失日期的日历表

解决此问题并包含所有日期在指定的范围内,无论是否有数据,我们都可以利用一个称为“日历表”的概念。这些表有助于生成给定间隔内的日期序列,本质上充当所有可能日期的“伪”表。

以下是如何在 MySQL 中创建日历表的示例:

-- Create a table with integers from 0 to 9
CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

-- Generate a sequence of dates from '2009-06-25' to '2009-07-01'
SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date
FROM ints a JOIN ints b
WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
登录后复制

创建日历表后,您可以与数据表执行左连接以填充缺失的日期。以下是更新后的查询:

SELECT cal.date, tbl.data
FROM (
SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date
FROM ints a JOIN ints b
WHERE date BETWEEN '2009-06-25' AND '2009-07-01'
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
登录后复制

此查询检索指定范围内的所有日期,包括“tbl”表中没有任何数据的日期。缺少数据的日期将在“数据”列中具有 NULL 值。

以上是如何填充 MySQL 查询中两个日期之间缺失的日期?的详细内容。更多信息请关注PHP中文网其他相关文章!

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