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

如何在DB2中关联两表计算按ID分区的近90天数值总和?

DB2中实现按ID分区计算近90天value总和的方案

针对你的需求,以下是几种在DB2中实现的方式:

1. 直接查询得到包含新列的结果(无需修改原表)

如果只是需要获取预期的查询结果,不需要修改table_a的物理结构,可以使用相关子查询结合COALESCE处理无匹配的情况:

SELECT 
    a.id,
    a.date,
    COALESCE(
        (SELECT SUM(b.value) 
         FROM table_b b 
         WHERE b.id = a.id 
           AND b.date >= a.date - 90 DAYS 
           AND b.date <= a.date),
        0
    ) AS new_column
FROM table_a a;

逻辑说明:

  • 对table_a的每条记录,关联同ID的table_b数据,筛选出table_b.date在当前记录日期前90天到当天范围内的记录
  • 用COALESCE将无匹配时的NULL转为0,符合预期结果要求

2. 为table_a添加物理列并填充数据

如果需要永久在table_a中添加该列,可分两步操作:

步骤1:添加新列

ALTER TABLE table_a ADD COLUMN new_column INT DEFAULT 0;

步骤2:填充列数据

UPDATE table_a a
SET new_column = COALESCE(
    (SELECT SUM(b.value) 
     FROM table_b b 
     WHERE b.id = a.id 
       AND b.date >= a.date - 90 DAYS 
       AND b.date <= a.date),
    0
);

3. 自动维护新列(当table_b数据变化时自动更新)

如果希望new_column能随table_b的数据插入、更新、删除自动同步,需要创建触发器来实现(DB2的生成列不支持跨表引用):

-- 处理table_b插入操作的触发器
CREATE TRIGGER trg_table_b_insert
AFTER INSERT ON table_b
FOR EACH ROW
UPDATE table_a a
SET new_column = COALESCE(
    (SELECT SUM(b.value) 
     FROM table_b b 
     WHERE b.id = a.id 
       AND b.date >= a.date - 90 DAYS 
       AND b.date <= a.date),
    0
)
WHERE a.id = NEW.id;

-- 处理table_b更新操作的触发器
CREATE TRIGGER trg_table_b_update
AFTER UPDATE ON table_b
FOR EACH ROW
UPDATE table_a a
SET new_column = COALESCE(
    (SELECT SUM(b.value) 
     FROM table_b b 
     WHERE b.id = a.id 
       AND b.date >= a.date - 90 DAYS 
       AND b.date <= a.date),
    0
)
WHERE a.id = COALESCE(NEW.id, OLD.id);

-- 处理table_b删除操作的触发器
CREATE TRIGGER trg_table_b_delete
AFTER DELETE ON table_b
FOR EACH ROW
UPDATE table_a a
SET new_column = COALESCE(
    (SELECT SUM(b.value) 
     FROM table_b b 
     WHERE b.id = a.id 
       AND b.date >= a.date - 90 DAYS 
       AND b.date <= a.date),
    0
)
WHERE a.id = OLD.id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 02:53:11