2016-06-07 7 views
0

Совсем не новый для mysql и возникают проблемы при формулировании этого типа запроса.mysql как извлекать данные из нескольких и суммировать

Под одной таблице (таблица называется tableX), скажем, структура, как показано ниже

server  date   numberofUser 
server1 timestamp  3 
server2 timestamp  2 
server3 timestamp  7 
server1 timestamp  2 
server2 timestamp  8 
server3 timestamp  4 

... .. и так далее

Я знаю, что могу просто сделать простой выберите сумму (numberofUser) из tableX, где сервер как «server1» упорядочивается по timestamp desc limit 100; , чтобы получить общее количество пользователей для server1 за последние 100 timestamp

Но как бы вы это сделали для всех 3 серверов? Я хочу агрегировать результаты для всех 3 серверов на 100 временных отметок для каждого из серверов. Просто не уверен, как это сделать. Пожалуйста помоги.

+0

Возможной Дубликат [Получить Top N записей для каждой группы из сгруппированных результатов] (http://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results) – Shadow

+0

Вы не можете запустить sql на серверах :(, вам нужно использовать некоторый программный посредник –

+0

Я проверю это сообщение .. И да, это только с одного сервера sql (под одной таблицей) – user3502374

ответ

1

Использование группы по

select sum(numberofUser) , server 
from tableX 
group by server 

и ограничить ваш период времени

select sum(numberofUser) , server 
from tableX 
where timestamp between 'your_date_min' AND 'your_date_max' 
group by server 

Общий для всех серверов просто

select sum(numberofUser) 
from tableX 

за последние 10 ряда server1 и server2

Тотал для одного сервера

select sum(numberofUser), server from (
    (select server, date, numberofUser from tableX 
    where server = 'server1' 
    order by date limit 10) 
    union 
    (select server, date, numberofUser from tableX 
    where server = 'server2' 
    order by date limit 10)) as t 
group by server 

или общего для сервера 2

select sum(numberofUser) from (
    (select server, date, numberofUser from tableX 
    where server = 'server1' 
    order by date limit 10) 
    union 
    (select server, date, numberofUser from tableX 
    where server = 'server2' 
    order by date limit 10)) as t 
+0

как бы вы их добавили? а не сервером, как бы подвести итог всему серверу? – user3502374

+0

Вам нужно общее для всего сервера? .. – scaisEdge

+0

Как бы то ни было, я обновил ответ. Надеюсь, это то, что вы ищете .. и это может вам помочь. – scaisEdge

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