2

是否可以编写一个 SELECT 查询来检索具有 60 秒时间戳间隔的数据?

我想获取数据来制作图表,并将数据转储到 MySQL 数据库中。我有带有时间戳、目标端口和发送字节的流:

mysql> select * from eth2_flows limit 1;
+---------+----------+---------+-------+----------+-----------+-------------+---------------+-------------+---------------+---------------+----------------+-----------+----------+-----------+----------+---------------------+----------------------+----------------------+-------------------+-----------------------+------------------------+-----------------+------------------+----------+---------------+---------------+----------+---------------+---------+-----------+
| idx     | IN_BYTES | IN_PKTS | FLOWS | PROTOCOL | TCP_FLAGS | L4_SRC_PORT | IPV4_SRC_ADDR | L4_DST_PORT | IPV4_DST_ADDR | LAST_SWITCHED | FIRST_SWITCHED | OUT_BYTES | OUT_PKTS | ICMP_TYPE | SRC_VLAN | IP_PROTOCOL_VERSION | CLIENT_NW_DELAY_USEC | SERVER_NW_DELAY_USEC | APPL_LATENCY_USEC | RETRANSMITTED_IN_PKTS | RETRANSMITTED_OUT_PKTS | OOORDER_IN_PKTS | OOORDER_OUT_PKTS | L7_PROTO | IPV6_SRC_ADDR | IPV6_DST_ADDR | HTTP_URL | HTTP_RET_CODE | HTTP_UA | HTTP_MIME |
+---------+----------+---------+-------+----------+-----------+-------------+---------------+-------------+---------------+---------------+----------------+-----------+----------+-----------+----------+---------------------+----------------------+----------------------+-------------------+-----------------------+------------------------+-----------------+------------------+----------+---------------+---------------+----------+---------------+---------+-----------+
| 1265340 |       40 |       1 |     0 |        6 |        16 |        4805 |    2886729835 |         139 |    2886729734 |    1344280441 |     1344280441 |        40 |        1 |         0 |        0 |                   4 |                    0 |                    0 |                 0 |                     0 |                      0 |               0 |                0 |        0 |               |               |          |             0 |         |           |
+---------+----------+---------+-------+----------+-----------+-------------+---------------+-------------+---------------+---------------+----------------+-----------+----------+-----------+----------+---------------------+----------------------+----------------------+-------------------+-----------------------+------------------------+-----------------+------------------+----------+---------------+---------------+----------+---------------+---------+-----------+
1 row in set (0.00 sec)

我需要以 60 秒的间隔对结果进行分组并添加 IN_BYTES 和 OUT_BYTES 来获取数据...

是否可以执行此操作,或者我必须在 PHP 中编写一些代码?

4

1 回答 1

3

如果您的时间戳存储在 中LAST_SWITCHED,它看起来像一个 Unix 时间戳。这是自 1970 年以来的秒数。如果这是真的,您可以group by通过将 Unix 时间戳除以 60 来进行分钟:

select  LAST_SWITCHED div 60 as StartOfMinuteInterval
,       sum(IN_BYTES) as SumIn
,       sum(OUT_BYTES) as SumOut
group by
        LAST_SWITCHED div 60

在 MySQL 中,div是整数除法。所以x div y等于round(x / y)

于 2012-09-22T07:00:58.130 回答