У меня есть таблица с данными примера следующим образом:
Date | hostname |bytesIn|bytesOut|
2018/02/26 11:57:37 | abc.com | 100 | 500
2018/02/26 11:57:37 | abc.com | 50 | 500
2018/02/25 11:57:37 | xyz.com | 100 | 300
2018/02/25 11:57:37 | abc.com | 100 | 500
2018/02/25 11:57:37 | def.com | 200 | 500
Я хочу выбрать верхнюю запись n на основе общих байтов (bytesIn + bytesOut) за каждый день. Мне нужно вычислить сумму столбцов bytesIn и bytesOut и форматировать столбец Date (опустить hh: mm: ss part), чтобы получить суточную сумму totalbytes для определенного имени хоста. то мне нужно получить первые n имен хостов за каждый день на основе общих байтов. например, мне нужно получить, какие имена хостов потребляют большинство из них ежедневно.
Я видел похожие вопросы, но не мог применить ответы на мои вопросы. Как я могу получить эти записи?
ожидаемый результат должен быть таким (верхние 2 имени хоста в соответствии с полосой пропускания)
2018/02/26 | abc.com | 600
2018/02/26 | xyz.com | 550
2018/02/25 | def.com | 750
2018/02/25 | qwe.com | 300
2018/02/24 | asd.com | 550
2018/02/24 | sdf.com | 520
Следующий запрос будет полезен для вас,
select hostname, Dates, totalBytes
from
( select @prev := '', @n := 0 ) init
join
( select @n := if( Dates != @prev, 1, @n + 1) AS n,
@prev := Dates,
hostname, Dates, totalBytes
from ( select hostname,DATE_FORMAT(dates, '%Y/%m/%d') as Dates,
(sum(bytesIn) + sum(bytesOut)) totalBytes
from your_table
group by hostname,dates
order by Dates desc, totalBytes desc
) T1
) T2
where n <= 2
n
укажите количество записей в день.