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

如何使用SQL为指定日期范围生成填充最新费率的新增行

需求说明

现有表结构如下:
表结构示意图
当前表中仅记录了商品A部分日期对应的费率信息,需要补全2020年1月1日至2020年1月30日期间所有日期的对应行,每行填充当前可获取的最新有效rate,具体填充规则如下:

  • 2020年1月1日 ~ 2020年1月10日:rate = 10
  • 2020年1月11日 ~ 2020年1月15日:rate = 13
  • 2020年1月16日 ~ 2020年1月25日:rate = 15
  • 2020年1月26日 ~ 2020年1月30日:rate = 15
实现方案

假设你使用的是支持CTE的SQL环境(MySQL8.0+/PostgreSQL/Hive等),原表名为product_rate,包含字段product_name(商品名称)、effect_date(费率生效日期)、rate(费率值),实现代码如下:

-- 生成2020-01-01到2020-01-30的连续日期序列
WITH RECURSIVE date_list AS (
    SELECT '2020-01-01' AS dt
    UNION ALL
    SELECT DATE_ADD(dt, INTERVAL 1 DAY)
    FROM date_list
    WHERE dt < '2020-01-30'
)
SELECT
    dt,
    '商品A' AS product_name,
    -- 取小于等于当前日期的最近生效费率
    (
        SELECT rate
        FROM product_rate
        WHERE product_name = '商品A'
          AND effect_date <= dt
        ORDER BY effect_date DESC
        LIMIT 1
    ) AS rate
FROM date_list

如果使用的是不支持递归CTE的低版本MySQL,可以先生成一张辅助日期表再关联查询,核心逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:36:07