首页/数据/SQL 速查/递归 CTE 生成数字与日期序列
本包目录(311 条)

递归 CTE 生成数字与日期序列

用递归生成连续整数或日期,补全报表空缺天数;PostgreSQL 另有 generate_series,写法更短。

SQL 速查数据更新于 2026-10-12

MySQL 8 生成 1-100

MySQL 8 生成 1-100
WITH RECURSIVE seq AS (
    SELECT 1 AS n
    UNION ALL
    SELECT n + 1 FROM seq WHERE n < 100
)
SELECT n FROM seq;

PostgreSQL

PostgreSQL
SELECT n FROM generate_series(1, 100) AS n;

SELECT d::date
FROM generate_series(DATE '2024-01-01', DATE '2024-01-31', INTERVAL '1 day') AS d;
MySQL递归生成;受 cte_max_recursion_depth 限制
PostgreSQLgenerate_series 支持数字与时间步长
用途与业务表左连接补全缺失日期

易错点

  • MySQL 大范围递归生成较慢,上万行以上考虑持久化日历表
  • 序列与业务表按日期连接时,时区与截断口径要一致

数据来源与参考

  • MySQL 8.0 Reference Manual · Recursive CTEs
  • PostgreSQL Documentation · Set Returning Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌