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

如何通过单条SQL查询实现按日期的累计金额汇总?

如何用单条SQL查询实现按日期的累计金额求和?

当然可以!借助现代SQL的窗口函数,就能基于你已有的每日求和查询轻松扩展出累计求和功能,逻辑简洁且高效。

方案1:基于CTE的分步实现

先通过公共表表达式(CTE)算出每日的金额总和,再用窗口函数计算累计值,逻辑清晰易懂:

WITH DailySums AS (
    -- 复用你的查询得到每日金额总和
    SELECT s.date, SUM(s.amount) AS daily_total
    FROM dbo.Financieel AS s
    GROUP BY s.date
)
SELECT 
    date,
    daily_total,
    -- 窗口函数计算从最早日期到当前日期的累计总和
    SUM(daily_total) OVER (ORDER BY date) AS cumulative_total
FROM DailySums
ORDER BY date;

方案2:更简洁的聚合+窗口函数结合

SQL Server支持在窗口函数中嵌套聚合函数,所以你可以直接把两步合并成一个查询,无需CTE:

SELECT 
    s.date,
    SUM(s.amount) AS daily_total,
    -- 先聚合每日总和,再对这些总和做累计求和
    SUM(SUM(s.amount)) OVER (ORDER BY s.date) AS cumulative_total
FROM dbo.Financieel AS s
GROUP BY s.date
ORDER BY s.date;

关键细节说明

  • SUM(...) OVER (ORDER BY date) 是实现累计的核心:这个窗口函数会为每一行计算从结果集第一行到当前行的总和,ORDER BY date 确保累加严格按照日期先后顺序进行。
  • 如果你的date字段是字符串类型(比如存储01-01-2019这类文本),建议先转换为日期类型再排序,避免字符串排序导致的顺序错误。比如把ORDER BY date改成ORDER BY CONVERT(date, s.date, 105)(105是SQL Server中对应dd-mm-yyyy格式的转换代码)。

示例结果验证

针对你的测试数据,执行后会得到如下结果,完全符合需求:

datedaily_totalcumulative_total
01-01-20194040
02-01-20192060
03-01-201940100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:46:08