MySQL запрос или процедура для возврата таблицы из значений, рассчитанных по нескольким строкам - PullRequest
0 голосов
/ 03 февраля 2020

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

IP_SRC, IP_DST, BYTES_IN, BYTES_OUT, START_TIME, STOP_TIME
1.1.1.1 8.8.8.8 1080      540        1580684018  1580684100
8.8.4.4 1.1.1.1 2000      4000       1580597618  1580597800

Значения ВРЕМЕНИ являются тиками времени эпохи, и каждая запись в основном представляет собой один сеанс TCP.

Я хотел бы Сформулируйте запрос (или процедуру) для возврата таблицы со следующими полями:

DayOfMonth, TotalOutBytes
1            12345
2            83747
3            2389

, где DayOfMonth - это последние 14 дней или диапазон последних "n" дней (или чтобы сосредоточиться на основных проблема предполагает значения 1, 2, 3 февраля 2020 г.). Задача состоит в том, чтобы извлечь все строки из сетевой таблицы, где STOP_TIME находится в пределах временных интервалов для значения DayOfMonth для этой строки, и суммировать BYTES_OUT, чтобы сообщить как TotalOutBytes на эту дату.

Боюсь, я в некоторой степени плохо знаком с MYSQL и безнадежно потерян.

1 Ответ

0 голосов
/ 03 февраля 2020

Рассмотрим:

select
    day(from_unixtime(stop_time)) dayOfMonth,
    sum(bytes_out) TotalOutBytes
from mytable
where stop_time >= unix_timestamp(current_date - interval 14 day)
group by day(from_unixtime(stop_time)) 

Обоснование:

  • В предложении where используется unix_timestamp() для создания отметки времени unix, соответствующей 14 дням до текущей даты, который мы можем использовать для фильтрации таблицы
  • from_unixtime() превращает отметку времени эпохи в значение datetime, тогда day() дает вам номер дня для этого момента времени
  • , который вы можете затем агрегируйте с этим значением и суммой bytes_out на группу
...