[英]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.