【问题标题】:mysql Group by week and add totals to every weekmysql 按周分组并每周添加总计
【发布时间】:2018-07-25 14:16:38
【问题描述】:

我正在尝试创建一个查询,该查询将基于每周返回一个数字的总数,以便我可以创建一个上升趋势线图。在我的表中,我有许多记录完成日期(完成)的记录。我希望能够创建一个每周生成滚动总数的查询。因此,如果第 1 周完成了 10 个,第 2 周完成了 15 个,第 3 周完成了 5 个,那么期望的结果将是:

第 1 周总计:10 第 2 周总计:25 第 3 周总计:30

样本数据:

 id status  sched
 12 Successful  2017-04-04 00:00:00.000
 15 Successful  2017-06-20 19:30:00.000
 18 Successful  2017-10-17 18:00:00.000
 26 Successful  2017-04-05 00:00:00.000
 29 Successful  2017-06-16 00:00:00.000
 30 Successful  2017-04-06 00:00:00.000
 31 Successful  2017-04-07 00:00:00.000
 32 Successful  2017-04-06 00:00:00.000
 34 Successful  2017-10-18 18:00:00.000
 35 Successful  2017-06-13 00:00:00.000

这是我用来按周成功生成数据而没有任何汇总的查询。我尝试添加“WITH ROLLUP”,但它只给出了最后的总数,而不是一周一周。

select DATE_FORMAT(completed,'%d/%m/%Y') AS nd , wk, count(*)as totals
from
(
   select id, completed, yearweek(completed)as wk from w10_upgrades
   where status = 'Successful' and type = 'Normal'
   and yearweek(completed) is not null
) x
GROUP BY wk
ORDER BY wk;

期望的输出:

 wk     totals
 201714   10
 201715   25 (output would = week 201714 + 201715)
 201716   55 (output would = week 201714 + 201715 + 201716)
 ect...

赞赏任何方向。我找不到与此相关的任何内容。

【问题讨论】:

  • 请显示您的架构、示例源数据和预期输出。谢谢。
  • 这样的事情可能会对你有所帮助:stackoverflow.com/a/1290936/3044080
  • 这看起来很有希望。谢谢,

标签: mysql


【解决方案1】:

最终结果

SET @runtot:=0;
SELECT
   DATE_FORMAT(completed,'%d/%m/%Y') AS niceDate,
   wk,
   (@runtot := @runtot + c) AS rt
FROM
   (SELECT
        completed,
   yearweek(completed)as wk,
   COUNT(*) AS c
FROM  `w10_upgrades`
where status = 'Successful' and type = 'Normal'
and yearweek(completed) is not null
GROUP  BY wk
ORDER  BY wk) x

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多