SQL查询 - 替换硬编码值...(MySQL)
我们使用监视解决方案(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,
鲍勃
它看起来像你想要的是使用你的编程语言或MySQL user-defined变量来存储你选择一次的ID并重用它。
我假设你正在使用某种语言,比如PHP,来环绕这些调用。
然后,您可以:
- 做一个SELECT上的itemid,将其保存为$的itemid,然后传递到您的SELECT或
-
使用MySQL的用户定义的变量和保存的itemid,喜欢的东西
SET @的itemid =选择的itemid FROM trends_uint WHERE ....
SELECT .... WHERE t.itemid = @itemid ....
是的,这是可能的。但是,它会严重降低你的表现。
举一个例子,请参阅:http://www.1keydata.com/sql/sql-subquery.html
如果可能的话,你应该避免使用IN
关键字。
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
感谢。我没”但我试图用MySQL功能来实现它(如果可能的话,优先选择纯SQL查询),我将对用户定义的变量进行研究。 – 2009-08-20 16:34:42