您可以使用用户定义的变量来做到这一点,然后做一些算术运算
select timevalue,sumvalue_1 as sumvalue1, sumvalue_2 as sumvalue2 from
(
select
timevalue,
if(@prev_val1 = sumvalue1 or @prev_val1 > sumvalue1,@prev_val1,sumvalue1) as sumvalue_1,
if(@prev_val2 = sumvalue2 or @prev_val2 > sumvalue2,@prev_val2,sumvalue2) as sumvalue_2,
@prev_val1 := sumvalue1,
@prev_val2 := sumvalue2
from mytable,(select @prev_val1:=0,@prev_val2:=0)x
order by timevalue
)x
order by timevalue
这是一个演示
create table mytable (
timevalue datetime,
sumvalue1 int,
sumvalue2 int
);
insert into mytable values
('2016-08-16 08:30:00',3000,200),
('2016-08-16 08:45:00',3200,150),
('2016-08-16 09:00:00',3100,400),
('2016-08-16 09:15:00',3300,450),
('2016-08-16 09:30:00',3400,600);
mysql> select * from mytable;
+---------------------+-----------+-----------+
| timevalue | sumvalue1 | sumvalue2 |
+---------------------+-----------+-----------+
| 2016-08-16 08:30:00 | 3000 | 200 |
| 2016-08-16 08:45:00 | 3200 | 150 |
| 2016-08-16 09:00:00 | 3100 | 400 |
| 2016-08-16 09:15:00 | 3300 | 450 |
| 2016-08-16 09:30:00 | 3400 | 600 |
+---------------------+-----------+-----------+
现在查询
mysql> select timevalue,sumvalue_1 as sumvalue1, sumvalue_2 as sumvalue2 from
-> (
-> select
-> timevalue,
-> if(@prev_val1 = sumvalue1 or @prev_val1 > sumvalue1,@prev_val1,sumvalue1) as sumvalue_1,
-> if(@prev_val2 = sumvalue2 or @prev_val2 > sumvalue2,@prev_val2,sumvalue2) as sumvalue_2,
-> @prev_val1 := sumvalue1,
-> @prev_val2 := sumvalue2
-> from mytable,(select @prev_val1:=0,@prev_val2:=0)x
-> order by timevalue
-> )x
-> order by timevalue;
+---------------------+-----------+-----------+
| timevalue | sumvalue1 | sumvalue2 |
+---------------------+-----------+-----------+
| 2016-08-16 08:30:00 | 3000 | 200 |
| 2016-08-16 08:45:00 | 3200 | 200 |
| 2016-08-16 09:00:00 | 3200 | 400 |
| 2016-08-16 09:15:00 | 3300 | 450 |
| 2016-08-16 09:30:00 | 3400 | 600 |
+---------------------+-----------+-----------+