2

60秒のタイムスタンプ間隔でデータを取得するSELECTクエリを作成することは可能ですか?

グラフを作成するためのデータを取得したいのですが、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 に答える