Есть две таблицы - servers и uptime; С первой все понятно - по записи на сервак. В табле uptime куча записей, на каждый сервак может быть по сотне штук. Там записывается ид сервера и статус (1- вкл, 0 - выкл). Нужно чтоб нижеприведенный запрос выбирал с табли uptime разницу между всеми записями со статусом 1 и записями со статусом 0. (То есть - найти все, в которых ид серва = 5. Имеем, например, всего 15 штук - 10 со статусом 1, и 5 со статусом 0.). Потом вычесть процент аптайма серва (10 / 15 * 100). И вот нужно чтоб вытягивалось это значение аптайма для каждого серва. Есть такой запрос (where сократил): [sql]SELECT * FROM `servers` WHERE `game` = '1' [/sql] Полагаю, через COUNT + JOIN надо выруливать, но в кучу не могу собрать. Самбадихелми ))
А банальный подход не тянет? Код (Text): mysql> select * from servers; +----------+------------------+ | serverid | servername | +----------+------------------+ | 1 | Average server | | 2 | Excellent server | | 3 | Plugged off | +----------+------------------+ 3 rows in set (0.00 sec) mysql> select * from uptime; +----------+--------+---------------------+ | serverid | status | ts | +----------+--------+---------------------+ | 1 | 1 | 2010-06-13 22:39:15 | | 1 | 0 | 2010-06-13 22:39:20 | | 1 | 0 | 2010-06-13 22:39:24 | | 1 | 0 | 2010-06-13 22:39:24 | | 1 | 0 | 2010-06-13 22:39:24 | | 1 | 0 | 2010-06-13 22:39:25 | | 1 | 0 | 2010-06-13 22:39:25 | | 1 | 0 | 2010-06-13 22:39:25 | | 1 | 0 | 2010-06-13 22:39:25 | | 1 | 0 | 2010-06-13 22:39:26 | | 1 | 0 | 2010-06-13 22:39:26 | | 1 | 0 | 2010-06-13 22:39:26 | | 1 | 0 | 2010-06-13 22:39:27 | | 1 | 1 | 2010-06-13 22:39:30 | | 1 | 1 | 2010-06-13 22:39:31 | | 1 | 1 | 2010-06-13 22:39:31 | | 1 | 1 | 2010-06-13 22:39:31 | | 1 | 1 | 2010-06-13 22:39:31 | | 1 | 1 | 2010-06-13 22:39:32 | | 2 | 1 | 2010-06-13 22:39:37 | | 2 | 1 | 2010-06-13 22:39:37 | | 2 | 1 | 2010-06-13 22:39:37 | | 2 | 1 | 2010-06-13 22:39:37 | | 2 | 1 | 2010-06-13 22:39:38 | | 2 | 1 | 2010-06-13 22:39:38 | | 2 | 1 | 2010-06-13 22:39:38 | | 2 | 1 | 2010-06-13 22:39:38 | | 2 | 1 | 2010-06-13 22:39:39 | | 2 | 1 | 2010-06-13 22:39:39 | | 3 | 0 | 2010-06-13 22:39:46 | | 3 | 0 | 2010-06-13 22:39:47 | | 3 | 0 | 2010-06-13 22:39:47 | | 3 | 0 | 2010-06-13 22:39:47 | | 3 | 0 | 2010-06-13 22:39:47 | | 3 | 0 | 2010-06-13 22:39:48 | | 3 | 0 | 2010-06-13 22:39:48 | +----------+--------+---------------------+ 36 rows in set (0.00 sec) mysql> select servername, sum(status)/count(status) as uptime_perc -> from uptime -> join servers using(serverid) -> group by serverid; +------------------+-------------+ | servername | uptime_perc | +------------------+-------------+ | Average server | 0.3684 | | Excellent server | 1.0000 | | Plugged off | 0.0000 | +------------------+-------------+ 3 rows in set (0.00 sec)