2010-08-23 129 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