I have a network created MYSQL table with following fields:
x
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
The TIME values are epoch time ticks and each record is basically one TCP session.
I would like formulate a query (or procedure) to return a table with the following fields:
DayOfMonth, TotalOutBytes
1 12345
2 83747
3 2389
where DayOfMonth is the last 14 days or a range of last “n” days (or to keep the focus on the main problem assume the values are 1, 2, 3 of Feb 2020). The challenge is to grab all rows from the network table where STOP_TIME falls within the timeticks for DayOfMonth value for that row and sum up the BYTES_OUT to report as TotalOutBytes for that date.
I’m afraid I’m somewhat new to MYSQL and hopelessly lost.
Advertisement
Answer
Consider:
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))
Rationale:
- the
where
clause usesunix_timestamp()
to generate the unix timstamp corresponding to 14 days before the current date, which we can use to filter the table from_unixtime()
turns an epoch timestam pto adatetime
value, thenday()
gives you the day number for that point in time- you can then aggregate with that value and sum
bytes_out
per group