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

Oracle:按起始日期递增复制行至指定最大日期的实现方法

Oracle 按日期范围扩展数据行解决方案

不用写循环,Oracle里有两种高效的方式可以实现你的需求——针对每个Name、Colour组合,从起始日期开始逐日生成数据行,直到指定的最大日期(31/01/2023)。假设你的原表名为source_table,字段分别是NAME、START_DATE(DATE类型)、COLOUR。

方法一:递归CTE(WITH子句)

递归CTE可以逐行生成日期序列,逻辑清晰易读:

WITH date_expand AS (
    -- 锚点成员:取出原表的所有初始行
    SELECT 
        NAME,
        START_DATE AS CURRENT_DATE,
        COLOUR,
        DATE '2023-01-31' AS MAX_DATE
    FROM source_table
    UNION ALL
    -- 递归成员:逐日递增日期,直到达到最大日期
    SELECT 
        NAME,
        CURRENT_DATE + 1,
        COLOUR,
        MAX_DATE
    FROM date_expand
    WHERE CURRENT_DATE < MAX_DATE
)
SELECT NAME, CURRENT_DATE, COLOUR
FROM date_expand
ORDER BY NAME, CURRENT_DATE;

方法二:CONNECT BY层级查询

利用Oracle的层级查询特性,通过LEVEL生成日期增量,适合习惯传统写法的场景:

SELECT DISTINCT
    st.NAME,
    st.START_DATE + (LEVEL - 1) AS CURRENT_DATE,
    st.COLOUR
FROM source_table st
CONNECT BY LEVEL <= (DATE '2023-01-31' - st.START_DATE + 1)
-- 确保每个组合的层级只基于自身数据,避免交叉关联
AND PRIOR st.NAME = st.NAME
AND PRIOR st.COLOUR = st.COLOUR
AND PRIOR SYS_GUID() IS NOT NULL -- 防止ORA-01436错误
ORDER BY st.NAME, CURRENT_DATE;

期望输出示例

Name当前日期Colour
Dan01/01/2023Red
Dan02/01/2023Red
.........
Dan31/01/2023Red
Mike12/01/2023Blue
Mike13/01/2023Blue
.........
Mike31/01/2023Blue

内容的提问来源于stack exchange,提问作者felix.en

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:28:16