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

基于初始值计算累计差值:生产库存数据优化需求

解决方案

直接通过调整窗口函数的范围来修正计算逻辑,实现符合需求的剩余库存计算:

SELECT
    qty_needed,
    CASE
        -- 分组内第一行保留初始库存值
        WHEN ROW_NUMBER() OVER (PARTITION BY component ORDER BY partno) = 1
            THEN qty_onhand
        -- 计算剩余库存:初始库存减去之前所有行的需求累计值,库存耗尽后显示0
        ELSE GREATEST(
            qty_onhand - SUM(qty_needed) OVER (
                PARTITION BY component 
                ORDER BY partno 
                ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
            ),
            0
        )
    END AS remaining_qty_onhand
FROM your_table_name;

逻辑说明

  • 第一行处理:用ROW_NUMBER()标记分组内的首行,直接返回原始qty_onhand作为初始库存。
  • 后续行计算:
    • 窗口函数SUM(qty_needed)限定范围为当前行之前的所有行,避免包含当前行的需求值,确保累计的是已消耗的总量。
    • 用GREATEST(..., 0)确保剩余库存不会出现负数,库存耗尽后固定显示0。
  • 分组与排序:PARTITION BY component保证按物料独立计算,ORDER BY partno确保需求处理顺序符合业务逻辑。

示例验证

针对你的测试数据,执行后会输出:

qty_neededremaining_qty_onhand
510
55
50

原脚本问题分析

原脚本中SUM(qty_needed)的窗口范围是ROWS UNBOUNDED PRECEDING,会包含当前行的需求值,导致第一行计算时就出现10-5=5的错误结果,不符合初始库存显示要求。调整窗口范围为“到前一行”即可解决该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:44:55