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

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

Barbara Streisand
Barbara Streisand原创
2024-12-16 22:14:13534浏览

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

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