Выберите лучшие n записей на основе суммы 2 столбцов для каждого дня

0

У меня есть таблица с данными примера следующим образом:

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
  • 0
    Вы можете написать ожидаемый результат с данными примера?
  • 0
    См. Meta.stackoverflow.com/questions/333952/…
Показать ещё 2 комментария
Теги:

1 ответ

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 укажите количество записей в день.

Нажмите здесь для демонстрации SQL Fiddle

  • 0
    это дает все записи. Мне нужно получить лучшие n записей за каждый день.
  • 0
    дай как лимит. если n = 1, тогда установите ограничение 1 в запросе. В приведенном выше запросе я дал как 5
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню