MySQL生成连续时间区间日期列表的两种方法

Cora
Cora
发布时间:2026-10-16| 4人浏览过
原创

在MySQL中进行数据统计或报表生成时,常需补齐缺失的时间节点。本文详解如何利用数学计算生成连续日期列表,并提供基于视图的重用方案,支持日、月等多种时间粒度。

结果目标:无依赖地生成连续时间列表

通常我们习惯在业务表中筛选数据,但当需要生成“过去365天”或“某段时间内的每一天”这种纯时间序列,且中间可能没有业务数据时,直接查询业务表会导致断档。我们需要一种独立于业务数据的SQL方法来填充这些空白。

准备条件:理解数字序列原理

Mysql生成连续数字的核心技巧是利用四个子查询各自包含0-9的数字,通过交叉连接(Cross Join)或逗号连接生成10000个组合(0~9999)。利用 `CURDATE()` 配合 `INTERVAL` 进行加减运算,即可推导出连续的日期。

真实操作顺序与方法

第1步:直接查询生成日期列表(一次性使用)

目的:快速获得特定起止日期范围内的每一天,不修改库结构。

核心逻辑:将十位、百位、千位的权重叠加到当前日期上。

select a.date 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as date
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
) a
where a.date between '2020-01-20' and '2021-12-24' ORDER BY a.date asc;
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。