【问题标题】:MYSQL Start the cumulative sum() at 0MYSQL 从 0 开始累积 sum()
【发布时间】:2020-11-07 09:23:17
【问题描述】:

我的问题是我想要一天的累计总数。到目前为止,SQL 语句有效,只是总和应该从 0 开始。目前它从最后一个总和值开始。

SELECT datetime,
   recb,
   ( SELECT sum( recb )
     FROM   fritzboxdaten1h
     WHERE  datetime <= m.datetime ) AS sumrecb
   FROM   fritzboxdaten1h AS m WHERE datetime Between '2020-11-06 00:00' And '2020-11-06 23:59'
   GROUP BY datetime

输出:

datetime             recb   sumrecb
2020-11-06 01:00:00  52.1   81396.8
2020-11-06 02:00:00  53.6   81450.4
2020-11-06 03:00:00  55.1   81505.5
2020-11-06 04:00:00  61.0   81566.5

它应该输出那个

datetime             recb   sumrecb
2020-11-06 01:00:00  52.1   52.1
2020-11-06 02:00:00  53.6   105.7
2020-11-06 03:00:00  55.1   110.8
2020-11-06 04:00:00  61.0   171.8

解决方案是什么?

提前感谢您的帮助。

【问题讨论】:

  • "这个问题没有显示任何研究成果;..."
  • 您是否尝试将 where 子句中的日期过滤器复制到您的子查询中?
  • 一根没有棒棒糖的棍子

标签: mysql sum


【解决方案1】:

您假设 WHERE datetime Between '2020-11-06 00:00' And '2020-11-06 23:59' 发生在子查询执行之前 - 这不是您需要在子查询

SELECT 
   datetime, recb,
   (SELECT SUM (recb)
    FROM t
    WHERE datetime <= m.datetime 
      AND datetime BETWEEN '2020-11-06 00:00' AND '2020-11-06 23:59') AS sumrecb
FROM   
    t AS m 
WHERE 
    datetime BETWEEN '2020-11-06 00:00' AND '2020-11-06 23:59'
GROUP BY 
    datetime;

主查询中的 group by 在某些 SQL 版本中毫无意义且语法不正确,可以(应该)删除。您还应该在子查询中包含 order by。

SELECT datetime, recb,
   ( SELECT sum( recb )
     FROM   t
     WHERE  datetime <= m.datetime and datetime Between '2020-11-06 00:00' And '2020-11-06 23:59' order by datetime ) AS sumrecb
FROM   t AS m WHERE datetime Between '2020-11-06 00:00' And '2020-11-06 23:59';

或者如果在 v8 或更高版本上,您可以使用窗口函数

select datetime,recb,
         sum(recb) over (partition by date(datetime) order by datetime) sumrecb
from t
where date(datetime) = '2020-11-06'
order by datetime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多