2016-04-28 82 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

你手裏有兩排 - 所以你可以比較,過濾......對我來說 - 這就是答案。 –