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

如何计算数据表中每月初重置为0的累计值 以利息累加计算为例

按月重置累计利息的SQL实现方案

你需要的是按自然月为周期的滚动累计计算,推荐优先使用标准SQL窗口函数实现,兼容性好且逻辑清晰,无需自定义变量:

支持窗口函数的数据库(MySQL 8.0+/SQL Server/PostgreSQL/Oracle通用方案)

核心逻辑是用PARTITION BY对同月份的数据做分区,每个分区内单独做累计求和:

SELECT
  report_date,
  Interest,
  SUM(Interest) OVER (
    -- 按年月分区,每个月的计算独立,自动实现月初重置
    PARTITION BY DATE_TRUNC('month', report_date)
    -- 按日期正序累加
    ORDER BY report_date ASC
  ) AS Interest_Cummulative
FROM 你的业务表名

注:不同数据库提取月份维度的函数略有差异,可以替换为对应语法:

  • SQL Server:DATEFROMPARTS(YEAR(report_date), MONTH(report_date), 1)
  • MySQL:DATE_FORMAT(report_date, '%Y-%m')

不支持窗口函数的低版本数据库(变量方案修正)

你原来的变量方案存在逻辑冗余,且没有判断年月切换的逻辑,修正后写法如下(以SQL Server为例):

DECLARE @AI FLOAT = 0
DECLARE @last_year INT, @last_month INT

SELECT
  report_date,
  Interest,
  -- 切换月份时重置累计值,否则累加
  @AI = CASE 
    WHEN YEAR(report_date) = @last_year AND MONTH(report_date) = @last_month 
    THEN @AI + Interest 
    ELSE Interest 
  END,
  -- 更新上月记录值
  @last_year = YEAR(report_date),
  @last_month = MONTH(report_date),
  @AI AS Interest_Cummulative
FROM 你的业务表名
-- 必须按日期排序,否则累计逻辑会出错
ORDER BY report_date ASC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:30:02