繁体   English   中英

MYSQL 从 0 开始累积 sum()

[英]MYSQL Start the cumulative sum() at 0

我的问题是我想要一天的累计总数。 到目前为止,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 datetime 介于 '2020-11-06 00:00' 和 '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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM