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

求助:如何实现历史余额与当前收支的累计余额计算?

累计余额计算实现方案

核心计算逻辑

  • 首日Output = 当日Input - 当日Spent
  • 非首日Output = 前一日Output + (当日Input为null时取0) - 当日Spent

不同工具实现示例

1. SQL实现(通用关系型数据库)

使用窗口函数实现累计求和,自动处理日期顺序的累计计算:

SELECT 
    Date,
    Id,
    Input,
    Spent,
    -- 累计每日收支差(Input空值转0)
    SUM(COALESCE(Input, 0) - Spent) OVER (ORDER BY Date) AS Output
FROM your_table_name
ORDER BY Date;

说明:COALESCE(Input, 0)将null的Input转换为0,SUM() OVER (ORDER BY Date)按日期顺序累加每日收支差,完全匹配需求中的计算规则。

2. Python Pandas实现

通过数据预处理和累计求和函数快速计算:

import pandas as pd

# 读取数据(示例)
df = pd.read_csv("your_data.csv")

# 处理Input空值,转为0
df["Input"] = df["Input"].fillna(0)
# 计算每日收支差
df["Daily_Diff"] = df["Input"] - df["Spent"]
# 累计求和得到Output
df["Output"] = df["Daily_Diff"].cumsum()

# 确保按日期排序(关键:必须保证数据按日期顺序排列)
df = df.sort_values("Date").reset_index(drop=True)

# 输出结果
print(df[["Date", "Id", "Input", "Spent", "Output"]])

3. Excel实现

手动编写公式实现逐行计算:

  • 假设数据从第2行开始(A列=Date,C列=Input,D列=Spent)
    • 第2行(首日)Output单元格(E2):=C2-D2
    • 第3行及以后(E3、E4...):=E2+IF(C3="",0,C3)-D3,下拉填充公式即可

示例验证

输入数据:

DateIdInputSpent
20230301110030
202303022null20
2023030335015

计算后输出:

DateIdInputSpentOutput
2023030111003070
202303022null2050
202303033501585

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:12:56