总结SQL的减少

时间:2016-04-28 21:02:54

标签: mysql sql

我有一个像(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。如果在两个时间点之间使用增加,我想忽略该间隔。

1 个答案:

答案 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

其他选择是在您的程序中执行此操作。