mysql - SQL 查询 - 替换硬编码值... (MySQL)

标签 mysql

我们使用监控解决方案(zabbix)。它使用名为trends_uint 的表存储趋势数据(MySQL 5.X),其结构如下(简化):

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

时钟字段使用 Unix 时间存储日期时间值。

我正在尝试提取报告以查看受监控项目的消耗情况。我想通过选择最旧的记录和最新的记录来做到这一点。我通过以下方式实现了它:

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)。

系统有另一个表(项目),我可以从中提取需要放入报告中的项目。类似于 从项目中选择 itemid ...

所以这是我的问题:是否可以使其“动态”,而不是使用硬编码的 itemid,例如使用另一个查询返回的代码(例如:SELECT ... FROM ... WHERE itemid IN (SELECT itemid FROM items WHERE ...)?

TIA,

鲍勃

最佳答案

看起来您想要的是使用您的编程语言或 MySQL user-defined变量来存储您选择过的 ID 并重复使用它。

我假设您正在使用某种语言(例如 PHP)来封装这些调用。

然后您可以:

  • 对 itemid 执行 SELECT,将其保存为 $itemid,然后传递到您的 SELECT 或
  • 使用MySQL用户定义的变量并保存itemid,类似于

    SET @itemid=从 trends_uint 中选择 itemid,其中 ....

    选择....其中t.itemid = @itemid ....

关于mysql - SQL 查询 - 替换硬编码值... (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1306694/

相关文章:

php - 如何加入帖子元和分类表wpdb mysql

PHP/MySQL 无法插入

mysql - 根据select删除多行

MySQL 非负 INT 列

mysql - 逐月计算数字

mysql - 你能在 MySQL 中设计一个简单的例子,其中聚集索引是解决方案,而不是普通索引吗?

php - 1个表中的SQL连接列

c# - 添加 "pictures"链接并将其关联到 ID

MySql 从第 3 个表中获取计数、值,并引用第一个表

php - LEFT JOIN SQL 语句对性能的影响