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

如何在Ledger Stock中实现累计求和?求技术解决方案

解决Ledger Stock累计求和的方案

嘿,我来帮你搞定这个Ledger Stock累计求和的问题!根据你给出的输入数据和期望输出,核心需求是按ProductId分组,按日期(以及账本ID)排序后,计算每一行的累计库存。

核心计算逻辑

累计库存的常规业务规则是:

  • 每个产品的第一条记录,库存 = 当前行Credit - Debit
  • 后续每一行的库存 = 上一行的累计库存 + 当前行Credit - Debit

不同场景的实现方法

1. SQL数据库(推荐,适合批量数据处理)

如果你的数据存储在SQL数据库中,根据数据库版本不同,有两种实现方式:

方式一:支持窗口函数的数据库(MySQL 8.0+、SQL Server 2012+、PostgreSQL等)

用SUM() OVER()窗口函数可以简洁实现累计求和:

SELECT
    LedgerID,
    ProductId,
    TType,
    ProductName,
    Credit,
    Debit,
    -- 按产品分组,按日期+账本ID排序,累计计算Credit-Debit的总和
    SUM(Credit - Debit) OVER (
        PARTITION BY ProductId 
        ORDER BY TDate, LedgerID 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS Stock,
    TDate
FROM your_ledger_table  -- 替换成你的实际表名
ORDER BY TDate, LedgerID;
方式二:不支持窗口函数的旧版数据库(MySQL 5.x等)

用用户变量来实现累计计算:

-- 初始化变量
SET @prev_product = NULL;
SET @cumulative_stock = 0;

SELECT
    LedgerID,
    ProductId,
    TType,
    ProductName,
    Credit,
    Debit,
    -- 判断是否为同产品,更新累计库存
    @cumulative_stock := CASE
        WHEN ProductId != @prev_product THEN Credit - Debit
        ELSE @cumulative_stock + Credit - Debit
    END AS Stock,
    TDate,
    @prev_product := ProductId  -- 更新上一个产品ID标记
FROM your_ledger_table
ORDER BY ProductId, TDate, LedgerID;

2. Excel/表格工具(适合小批量数据手动处理)

如果你的数据在Excel里,可以用简单公式快速实现:

  • 假设累计库存列是H列,数据从第2行开始
  • H2单元格输入:=D2-E2(计算第一条记录的初始库存)
  • H3单元格输入:=H2+D3-E3(基于上一行累计值计算当前行)
  • 选中H3单元格,下拉填充到所有行即可

注意事项

你给出的期望输出里第三、四行的Stock仍为30,这和常规的累计逻辑(减去Debit)不符,可能是示例未写完或者有特殊业务规则。如果你的需求有特殊逻辑(比如Debit暂不影响库存),可以调整公式中的计算规则哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:19:36