【问题标题】:Create Cumulative Recurring SUM in MySQL for Last "x" Days在 MySQL 中为最后“x”天创建累积循环 SUM
【发布时间】:2018-03-26 10:51:03
【问题描述】:

我的业务销售经历了一个非常独特的年度周期,该周期基于全年的季节。我无法了解我每周或每月的成长。我真正需要的是显示过去 365 天的运行总计——每一天。当我跨越一整年时,我真的可以看到我的业务是如何增长的。

下面,我只是编造数据来解释我的愿望。我已经有一个 SQL 查询,它给出了年、周和销售额。这是我的查询(它涉及一些加入,但它有效):

SELECT
YEAR(arrPurch.PurchaseDate) as YEAR,
Week(arrPurch.PurchaseDate) AS Week,
SUM(ROUND(arrPurch.Credits*1.85+arrPurch.Price,0)) AS `Sales`
FROM
arrangementPurchases AS arrPurch
INNER JOIN catalog_dev_arrangements AS catDEVarr ON arrPurch.ArrangementID = catDEVarr.ArrangementID
INNER JOIN members ON arrPurch.MemberID = members.MemberID
WHERE arrPurch.PurchaseDate >= '2015-01-04'
GROUP BY Year, Week
ORDER BY Year, Week

现在,我需要的是允许我获得第四列“累积年份”的代码,其中考虑到当前周以及所有 51 周的销售额。然后,每周,我都会对我的销售增长状态有一个清晰的认识,因为我知道每周累积会考虑到我年度销售周期中的所有季节。

Year      Week         Sales           Cumulative Year
-------------------------------------------------------
2017       01          24,292          2,467,488
2017       02          32,838          2,471,433
2017       03          33,283          2,470,212

请帮忙:-)

【问题讨论】:

    标签: mysql sum


    【解决方案1】:

    我使用了一个子查询来获取从给定年份一周到 51 周前的销售额总和。请参阅下面的示例演示

    http://sqlfiddle.com/#!9/ce6dd0/1

    select
    YEAR(arrPurch.PurchaseDate) as YEAR,
    Week(arrPurch.PurchaseDate) AS Week,
    SUM(ROUND(arrPurch.Credits*1.85+arrPurch.Price,0)) AS `Sales`,
    (select sum(ROUND(t.Credits*1.85+t.Price,0))
          FROM arrangementPurchases AS t
          INNER JOIN catalog_dev_arrangements AS catDEVarr ON t.ArrangementID = catDEVarr.ArrangementID
          INNER JOIN members ON t.MemberID = members.MemberID
      where YEARWEEK(t.purchaseDate)
      between YEARWEEK(arrPurch.purchaseDate - INTERVAL 51 WEEK) 
     and YEARWEEK(arrPurch.purchaseDate)) as `Cumulative_Year`
    FROM arrangementPurchases AS arrPurch
    INNER JOIN catalog_dev_arrangements AS catDEVarr ON arrPurch.ArrangementID = catDEVarr.ArrangementID
    INNER JOIN members ON arrPurch.MemberID = members.MemberID
    WHERE arrPurch.PurchaseDate >= '2015-01-04'
    GROUP BY Year, Week
    ORDER BY Year, Week
    

    【讨论】:

    • 我们越来越近了!当我发布您的代码时,我收到以下错误:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'arrPurch.ArrangementID' in 'on clause'。我确实注意到您输入了以下内容:FROM arrangementPurchases AS t。我认为这让我的 arrPurch 参考悬而未决。所以,然后我用“arrPurch”替换了你所有的“t”实例,最终得到了工作结果,但每一行的总和都是一样的。这似乎是自 2015 年以来我所有销售额的总和。有可能arrangementPurchases AS t 弄错了吗?
    • 我已修复,请重试。请复制并粘贴然后再次运行。谢谢。
    • 我刚刚去看了你的示例演示。我稍微修改了一下,发现它确实有效。在这里查看我的版本:[sqlfiddle.com/#!9/f16198/2]。现在我只需要弄清楚如何让它与我的原始数据一起工作,并解决我遇到的错误。
    • 代码正在计算,但可能需要一段时间,因为要处理的数据很多。到目前为止,没有错误,所以这很好。我会告诉你它是否有效!
    • 作为一个变体,你能告诉我如何从同一个查询中得到 RUNNING TOTAL 而不是 ANNUALIZED SUM。
    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多