我有一个像(id,disk_id,disk_usage,time_measured)这样的表
每一行对应于某个时间点的磁盘使用情况。磁盘将有很多行。 id只是一个主键列。
我想总结一下2016年1月1日到2016年3月1日之间行之间减少的时间间隔。
即。如果特定的disk_usage在2016年1月1日是10GB而在2016年1月1日是5GB,我想在我的总和中加入5GB。如果在两个时间点之间使用增加,我想忽略该间隔。
答案 0 :(得分:1)
嗯......这对于窗口函数来说是个很好的任务。这不适用于mysql。你可以做什么?对于每一行,您可以询问以前的记录 - 最新,但比您要查询的记录更旧。为此,您需要自行加入表格。让我们确定以前的日期:
select max(b.time_measured)
from the_table as a
join the_table as b
on a.disk_id = b.disk_id and a.time_measured > b.time_measured
group by a.disk_id
现在你有了那个约会。我不知道你的MySQL是否理解子选择 - 如果是这样你可以这样做:
select a.*, b.*
from the_table as a
join the_table as b
on a.disk_id = b.disk_id
where b.time_measured = (
select max(b.time_measured)
from the_table as a
join the_table as b
on a.disk_id = b.disk_id and a.time_measured > b.time_measured
group by a.disk_id)
group by a.disk_id
其他选择是在您的程序中执行此操作。