2009-08-20 109 views
0

我們使用監視解決方案(zabbix)。它存儲使用稱爲trends_uint具有以下結構(簡化的)表趨勢數據(MySQL的5.X):使用Unix時間SQL查詢 - 替換硬編碼值...(MySQL)

itemid clock  value_avg 
1   1238774400 100 
1   1250773900 70 
1   1250773200 50 

時鐘字段存儲日期時間值。

我試圖提取報告來查看受監視項目的消耗。我認爲通過選擇最舊的記錄和最新的記錄來做到這一點。我做到了這一點:

SELECT 
(SELECT t.clock FROM trends_uint t WHERE t.itemid = 1 AND t.clock IN (SELECT MIN(t.clock) FROM trends_uint t WHERE t.itemid = 1)) AS minClock, 
(SELECT t.value_avg FROM trends_uint t WHERE t.itemid = 1 AND t.clock IN (SELECT MIN(t.clock) FROM trends_uint t WHERE t.itemid = 1)) AS minValueAvg, 
(SELECT t.clock FROM trends_uint t WHERE t.itemid = 1 AND t.clock IN (SELECT MAX(t.clock) FROM trends_uint t WHERE t.itemid = 1)) AS maxClock, 
(SELECT t.value_avg FROM trends_uint t WHERE t.itemid = 1 AND t.clock IN (SELECT MAX(t.clock) FROM trends_uint t WHERE t.itemid = 1)) AS maxValueAvg, 
(SELECT maxClock - minClock) AS timeGap, 
(SELECT minValueAvg - maxValueAvg) AS valueGap, 
(SELECT timeGap/86400) AS daysGap, 
(SELECT valueGap/daysGap/1024/1024) AS consumeMB 

我的問題是,我有很多的服務器,我想從中計算消費。我不想改變查詢哪一個(改變itemid)。

該系統有另一個表格(項目),我可以從中提取需要放入報表的項目。像SELECT itemid FROM items WHERE ...

東西,所以這是我的問題:而不是使用硬編碼的itemid,是有可能使其「動態」的,例如使用返回代碼從另一個查詢(例如:SELECT ... FROM ... WHERE itemid IN (SELECT itemid FROM items WHERE ...)?

TIA,

鮑勃

回答

1

它看起來像你想要的是使用你的編程語言或MySQL user-defined變量來存儲你選擇一次的ID並重用它。

我假設你正在使用某種語言,比如PHP,來環繞這些調用。

然後,您可以:

  • 做一個SELECT上的itemid,將其保存爲$的itemid,然後傳遞到您的SELECT或
  • 使用MySQL的用戶定義的變量和保存的itemid,喜歡的東西

    SET @的itemid =選擇的itemid FROM trends_uint WHERE ....

    SELECT .... WHERE t.itemid = @itemid ....

+0

感謝。我沒」但我試圖用MySQL功能來實現它(如果可能的話,優先選擇純SQL查詢),我將對用戶定義的變量進行研究。 – 2009-08-20 16:34:42

0
select id, 
min(clock) as minClock, 
max(clock) as maxClock, 
maxClock - minClock as timeGap, 
(timeGap/86400) AS daysGap, 
min(value_avg) as minValueAvg, 
max(value_avg) as maxValueAvg, 
(valueGap/daysGap/1024/1024) AS consumeMB 
from trends_uint 
group by id; 

這應該一次完成所有這些。

在未來,如果你確實需要的東西作爲一個循環(雖然它看起來對我來說,這是作爲一個單獨的語句與一個「GROUP BY更好),參考是http://dev.mysql.com/doc/refman/5.0/en/flow-control-constructs.html