如何使用MySQL汇总每日重置数据



我正试图从MySQL表中累积绘制数据,该表记录一个值,每天重置为0。使用select * from table where DateTime BETWEEN DateA AND DateB选择值后,数据如下所示:当前数据。我希望输出看起来像这样:首选数据,忽略每日重置。

由于我是SQL的新手,我无法找到解决方案。然而,我确实使用for循环在Matlab中获得了正确的输出:

output = data;
for k=1:(size(data, 1)-1)
% check if next value is smaller than current
if data(k+1)<data(k) 
% add current value to all subsequent values
output = output + (1:size(data, 1)>k)'.*input(k);
end
end

我希望最终的产品连接到一个网页,所以我很好奇是否可以只使用SQL获得类似的结果。虽然我尝试过使用SUM(),但我只能对所有值求和,但我需要将每天的最后一个值添加到所有后续值中。

使用CTE并比较日期,可以对每个日期的所有值求和。

假设定义了下面的表1。

create table table1 (col_date date, col_value int);
insert into table1 values
('2020-07-15',1000),
('2020-07-15',2000),
('2020-07-16',1000),
('2020-07-16',3000),
('2020-07-16',4000),
('2020-07-17',1000),
('2020-07-18',2000),
('2020-07-19',1000),
('2020-07-19',1000),
('2020-07-19',2000),
('2020-07-19',3000),
('2020-07-20',4000),
('2020-07-20',5000),
('2020-07-21',6000)
;

在这种情况下,查询如下:

with cte1 as (
select col_date, sum(col_value) as col_sum from table1
where col_date between '2020-07-16' and '2020-07-20'
group by col_date
)
select a.col_date, max(a.col_sum), sum(b.col_sum)
from cte1 a inner join cte1 b on a.col_date >= b.col_date
group by a.col_date;

输出如下:

col_date    |max(a.col_sum) |sum(b.col_sum)
2020-07-16  |8000           | 8000
2020-07-17  |1000           | 9000
2020-07-18  |2000           |11000
2020-07-19  |7000           |18000
2020-07-20  |9000           |27000

max((的列仅供参考。

最新更新