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

跨月同周日期Fcst值合并存储需求:按周首日展示并写入xy表

需求说明

需将分属不同月份但归属同一周的两个日期的Fcst数值相加,合并后以该周首日作为startdate展示,最终将处理完成的数据存储至xy表中。

原始数据

需将分属不同月份但归属同一周的两个日期的数量(Fcst)相加,合并后以该周首日作为展示日期

ItemsubmlocstartdateTypeFcst
abc26-02-2023636.10988944
abc01-03-2023648.14651925
abc05-03-2023660.09763211
abc12-03-2023623.84474793

期望输出格式

我需要得到如下格式的数据:

ItemsubmlocstartdateTypeFcst
abc26-02-2023684.25640869
abc05-03-2023660.09763211
abc12-03-2023623.84474793

即将上述两个日期的Fcst值相加,并将结果存储至xy表中

解决方案

核心逻辑

  1. 将字符串格式的startdate转换为日期类型,计算该日期所在周的首日(需确认周起始日定义,示例以周一为周首日)
  2. 按Item、subm、loc、Type及周首日分组,对Fcst字段求和
  3. 将处理后的数据插入xy表

示例SQL(以MySQL为例)

-- 若xy表不存在则创建
CREATE TABLE IF NOT EXISTS xy (
    Item VARCHAR(50),
    subm VARCHAR(50),
    loc VARCHAR(50),
    startdate VARCHAR(10),
    Type INT,
    Fcst DECIMAL(18,8)
);

-- 插入处理后的数据
INSERT INTO xy
SELECT 
    Item,
    subm,
    loc,
    -- 计算周首日(周一为起始),并转为原日期格式
    DATE_FORMAT(
        STR_TO_DATE(startdate, '%d-%m-%Y') - INTERVAL WEEKDAY(STR_TO_DATE(startdate, '%d-%m-%Y')) DAY,
        '%d-%m-%Y'
    ) AS startdate,
    Type,
    SUM(Fcst) AS Fcst
FROM your_original_table
GROUP BY 
    Item,
    subm,
    loc,
    Type,
    -- 按ISO周分组,确保跨月同周数据被合并
    YEARWEEK(STR_TO_DATE(startdate, '%d-%m-%Y'), 1);

其他数据库适配说明

  • SQL Server:计算周首日可使用DATEADD(day, 1 - DATEPART(weekday, CONVERT(DATE, startdate, 105)), CONVERT(DATE, startdate, 105)),分组用DATEPART(iso_week, CONVERT(DATE, startdate, 105))和YEAR(CONVERT(DATE, startdate, 105))组合
  • PostgreSQL:用date_trunc('week', TO_DATE(startdate, 'DD-MM-YYYY'))获取周首日,分组直接使用该截断后的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:50