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

请求生成期初与期末库存数据(附输入输出示例)

计算库存期初与期末数据的解决方案

针对你给出的库存交易数据,我整理了一个基于SQL的高效解决方案,完全匹配你的需求:

核心需求拆解

先明确几个关键逻辑:

  • PRODUCTKEY:由WAREHOUSECODE和PRODUCT_CODE用连字符拼接生成(比如B12-2210008)
  • TRANSACTION_Qty:同一仓库、产品、日期下所有QUANTITY的总和
  • OPENING_STOCK:对应维度上一日的期末库存,最早日期的期初库存设为0
  • CLOSING_STOCK:直接用OPENING_STOCK加上当日TRANSACTION_Qty即可

SQL实现代码

以下代码兼容大多数现代数据库(如PostgreSQL、MySQL 8.0+、BigQuery等):

-- 第一步:按仓库、产品、日期汇总当日交易总量
WITH daily_transactions AS (
    SELECT
        CONCAT(WAREHOUSECODE, '-', PRODUCT_CODE) AS PRODUCTKEY,
        WAREHOUSECODE,
        PRODUCT_CODE,
        STOCK_DATE,
        SUM(QUANTITY) AS TRANSACTION_Qty
    FROM Input_data
    GROUP BY WAREHOUSECODE, PRODUCT_CODE, STOCK_DATE
),
-- 第二步:计算从最早日期到当日的累计库存(即当日期末库存)
inventory_running AS (
    SELECT
        *,
        SUM(TRANSACTION_Qty) OVER (
            PARTITION BY PRODUCTKEY
            ORDER BY STOCK_DATE ASC
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS cumulative_stock
    FROM daily_transactions
)
-- 第三步:生成期初库存,组合最终结果
SELECT
    PRODUCTKEY,
    WAREHOUSECODE,
    PRODUCT_CODE,
    STOCK_DATE,
    -- 首日没有历史库存,期初设为0;其余日期取上一日的期末库存
    COALESCE(LAG(cumulative_stock) OVER (
        PARTITION BY PRODUCTKEY
        ORDER BY STOCK_DATE ASC
    ), 0) AS OPENING_STOCK,
    TRANSACTION_Qty,
    cumulative_stock AS CLOSING_STOCK
FROM inventory_running
ORDER BY PRODUCTKEY, STOCK_DATE;

结果验证

运行代码后会得到和你预期完全一致的输出:

PRODUCTKEYWAREHOUSECODEPRODUCT_CODESTOCK_DATEOPENING_STOCKTRANSACTION_QtyCLOSING_STOCK
B12-2210008B12221000831-DEC-1707.57.5
B12-2210008B12221000808-JAN-187.5-16.5

补充说明

如果你的数据库版本较低(比如MySQL 5.x)不支持窗口函数,可以用关联子查询替代,但窗口函数的方式在数据量较大时性能会更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:53:09