2010-08-23 127 views
1

我有一张表格可以帮助我追踪从属和主人之间的延迟时间。我的问题是如何制定一个选择语句:
1.给我最新的延迟值,不重复(或跳过)IP地址
2.如果我添加额外的服务器或不需要更新服务器变得没有反应MySQL嵌套查询选择语句

此查询的目标是向我展示哪些服务器可用于工作,并给我粗略估计他们工作的难度。不可操作的服务器不应出现在结果中。我正在运行一个脚本来评估每分钟的延迟时间,所以如果我可以限制可能的记录返回到最后一分半钟,那应该足以告诉我哪些服务器最后一次启动了查询。

表看起来是这样的(更名为保护无辜者列):

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
ip VARCHAR(20) NOT NULL , 
sent TIMESTAMP NOT NULL , 
delay DECIMAL (7,4) NOT NULL , 
status VARCHAR(100) NOT NULL , 
execution_time` DECIMAL (7,4)NOT NULL , 
deleted` TINYINT NOT NULL , 

任何帮助,将不胜感激。

回答

0

一些google搜索后,和一些测试,这是最好的答案,我发现这样至今:

SELECT ip, id, delay, stat_sent 
    FROM status 
    WHERE stat_sent > DATE_SUB(NOW() , INTERVAL 1 MINUTE) 
    AND stat_sent 
    IN (

     SELECT max(stat_sent) 
     FROM status GROUP BY stat_ip 
    ) 

修改我的答案现在它限制了结果的范围,已在更新服务器最后一分钟。

0

这是怎么回事?

select delay 
    from table_name, 
     (select id, max(sent), ip from table_name group by ip) innertable 
    where innertable.id = table_name.id; 

不是100%确定我明白你想要的结果集,所以我只是选择延迟。

+0

那么,只是证明我还有很多东西要学习,考虑到我甚至不知道这是可能的......我的查询结果看起来像这样: SELECT delay,ip FROM status,(SELECT id ,最大(发送)从状态组通过IP)innertable WHERE innertable.id = status.id 这给了我更多的谷歌...谢谢。 – 2010-08-23 21:12:51

+0

对不起,我认为这是正确的,但我意识到它只是返回我的两个第一个记录。 – 2010-08-23 21:37:08

+0

内部查询(选择ID,最大(发送),IP从table_name组ip)给你你期望的结果。我假设你想在每个IP地址的结果集中有一行。那是对的吗? – MikeTheReader 2010-08-23 21:51:44