You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MySQL将指定日期范围分割为3天单位的连续时间块

3天时间块分割SQL实现方案

实现逻辑

通过递归CTE生成连续的3天时间块,自动过滤不足3天的剩余区间,兼容MySQL 8.0+、PostgreSQL、SQL Server等支持递归公共表表达式的主流数据库。
假设你的原始表名为user_date_range,SQL实现代码如下:

WITH RECURSIVE date_blocks AS (
    -- 生成第一个3天时间块
    SELECT 
        User,
        `Minimum Date` AS block_min,
        DATE_ADD(`Minimum Date`, INTERVAL 2 DAY) AS block_max,
        `Maximum Date` AS user_max_date
    FROM user_date_range
    UNION ALL
    -- 递归生成后续所有符合要求的3天块
    SELECT 
        User,
        DATE_ADD(block_max, INTERVAL 1 DAY) AS block_min,
        DATE_ADD(block_max, INTERVAL 3 DAY) AS block_max,
        user_max_date
    FROM date_blocks
    WHERE DATE_ADD(block_max, INTERVAL 3 DAY) <= user_max_date
)
-- 格式化日期输出,和示例格式对齐
SELECT 
    User,
    DATE_FORMAT(block_min, '%m/%d/%Y') AS `Minimum Date`,
    DATE_FORMAT(block_max, '%m/%d/%Y') AS `Maximum Date`
FROM date_blocks
ORDER BY User, block_min;

语法适配说明

不同数据库的日期函数略有差异,对应调整即可:

  • SQL Server:将DATE_ADD替换为DATEADD,字段引用用方括号包裹,比如[Minimum Date]
  • PostgreSQL:日期加减直接写"Minimum Date" + INTERVAL '2 days',日期格式化用TO_CHAR(block_min, 'MM/DD/YYYY')

内容的提问来源于stack exchange,提问作者TryingToLearn97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:06:04