2010-08-23 2 views
1

У меня есть таблица, которая помогает мне отслеживать время задержки между моими рабами и мастером. Мой вопрос заключается в том, как я могу создать оператор выбора, который:
1. дает мне последние значения задержки, не повторяя (или пропуская) ip-адреса
2. не нужно обновлять, если я добавляю дополнительные серверы или как серверы не реагируютЗапрос на выбор вложенных запросов MySQL

Цель этого запроса - показать мне, какие серверы доступны для работы, и дать мне приблизительную оценку того, как сильно они работают. Серверы, которые не работают, не должны появляться в результатах. Я запускаю скрипт для оценки времени задержки как CLI каждую минуту, поэтому, если бы я мог ограничить возможные записи, возвращаемые в последнюю минуту и ​​полтора, это должно быть достаточно хорошо, чтобы сказать, какие серверы были в последний раз, когда они были запрос.

Таблица выглядит следующим образом (колонны переименованы, чтобы защитить невиновных):

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

Через некоторое Googling, и некоторые тестирования, это лучший ответ, который я нашел, таким образом, до сих пор:

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, ip FROM status, (SELECT id , max (отправлено) FROM status group by ip) innertable WHERE innertable.id = status.id Это дает мне больше возможностей для google ... спасибо. –

+0

Извините, я подумал, что это было правильно, но я понял, что это только возвращает мои первые две записи. –

+0

Внутренний запрос (выберите id, max (отправлено), ip из группы table_name по ip) даст вам ожидаемые результаты. Я предполагаю, что вам нужна одна строка в этом результирующем наборе для каждого IP-адреса. Это верно? – MikeTheReader

Смежные вопросы