2016-04-28 67 views
0

我有一个类似于(id,disk_id,disk_usage,time_measured)的表格SQL总结减少

每一行对应于某个时间点的磁盘使用情况。磁盘将有许多行。 ID只是一个主键列。

我想总结在2016年1月1日至2016年3月1日之间的日期行之间有减少的时间间隔。

I.e.如果某个特定的disk_usage在1/1/2016为10GB,而在1/2/2016为5GB,那么我希望在我的总和中包含5GB。如果在两个时间点之间使用增加,我想忽略该时间间隔。

+3

编辑您的问题,并提供样本数据和期望的结果。 –

回答

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 

其他选项是在你的程序中这样做。

+0

这是如何总结减少?它看起来像是发现了一对行,其中一行直接在另一行之前(半场战斗?) – OneSolitaryNoob

+0

你手里有两排 - 所以你可以比较,过滤......对我来说 - 这就是答案。 –