我有一个类似于(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。如果在两个时间点之间使用增加,我想忽略该时间间隔。
我有一个类似于(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。如果在两个时间点之间使用增加,我想忽略该时间间隔。
那么......这对于窗口函数来说是一件好事。这不适用于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
其他选项是在你的程序中这样做。
这是如何总结减少?它看起来像是发现了一对行,其中一行直接在另一行之前(半场战斗?) – OneSolitaryNoob
你手里有两排 - 所以你可以比较,过滤......对我来说 - 这就是答案。 –
编辑您的问题,并提供样本数据和期望的结果。 –