我有一个包含样本数据的表格如下:
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
我想根据每天的总字节数(bytesIn + bytesOut)选择前n个记录。我需要计算bytesIn和bytesOut列的总和并格式化Date列(省略hh:mm:ss part)以获取特定主机名的每日总和。然后我需要根据总字节数每天获得前n个主机名。例如,我需要每天使用哪个主机名消耗带宽。
我看到了类似的问题但无法应用我的问题的答案。 我怎样才能获得这些记录?
预期的输出应该是这样的(根据带宽的前两个主机名,让我们说):
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
答案 0 :(得分:0)
以下查询对您有所帮助,
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
指定每天的记录数。