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

如何修改SQL查询实现Inv_SumNetTotal逐日累加展示?

实现逐日累加的发票金额统计

你可以通过窗口函数结合CTE(公共表表达式)简化原查询逻辑,同时实现逐月的逐日累加效果,修改后的SQL如下:

WITH daily_stats AS (
    SELECT 
        invoice.Date AS Inv_Date, 
        COUNT(*) AS NoOfInv, 
        SUM(Total) AS Daily_SumNetTotal
    FROM invoice 
    -- 一次性筛选上月初到当前月末的所有数据,替代原两次查询+UNION ALL
    WHERE invoice.Date BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01') AND LAST_DAY(NOW())
    GROUP BY invoice.Date
)
SELECT 
    NoOfInv,
    Inv_Date,
    -- 按月份分区,逐日累加当日金额
    SUM(Daily_SumNetTotal) OVER (
        PARTITION BY DATE_FORMAT(Inv_Date, '%Y-%m') 
        ORDER BY Inv_Date ASC
    ) AS Inv_SumNetTotal,
    -- 若需要千分位格式化(如期望输出的1,006,822),替换上面的Inv_SumNetTotal为以下语句:
    -- FORMAT(SUM(Daily_SumNetTotal) OVER (PARTITION BY DATE_FORMAT(Inv_Date, '%Y-%m') ORDER BY Inv_Date ASC), 0) AS Inv_SumNetTotal
FROM daily_stats
ORDER BY Inv_Date;

关键逻辑说明:

  • CTE daily_stats:先一次性统计目标时间范围内(上月初到当前月末)每日的发票数量和当日总金额,比原两次查询更高效简洁。
  • 窗口函数 SUM() OVER():
    • PARTITION BY DATE_FORMAT(Inv_Date, '%Y-%m'):确保累计计算按月份独立进行,避免上月金额累加到当月。
    • ORDER BY Inv_Date ASC:保证按日期顺序从当月第一天开始逐日累加。
  • 千分位格式化:使用FORMAT()函数可将数值转为带千分位的字符串,匹配你期望的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:35:19