3

私は以下のように2つのテーブルを持っています

client_table
 date (timestamp)
 ip (varchar)
 value1 (int)
 value2 (int)

ip_address_table
 starting_ip (varchar)
 ending_ip (varchar)
 provider (varchar)

ip_address_tableテーブルを使用してclient_tableエントリを検索し、IPアドレスが範囲内にある場合の1時間あたりの平均を見つけようとしています。(範囲内にない場合は行を無視してください)以下は私が思いついたものです

SELECT avg(value1),avg(value2)
FROM client_table
WHERE (INET_ATON(ip) BETWEEN INET_ATON(starting_ip) AND INET_ATON(ending_ip))
GROUP BY DATE(date),HOUR(date)

ただし、正しい出力は得られません。http://blog.jcole.us/2007/11/24/on-efficiently-geo-referencing-ips-with-maxmind-geoip-and-mysql-gis/を確認しましたが、ストアド関数の作成に苦労していますタスクを簡素化するために、助けていただければ幸いです

ありがとう

編集:私のサンプルデータは以下のとおりです

client_table
"date"  "ip"    "value1"    "value2"
"2012-01-10 06:38:29"   "121.1.2.3" "1049"  "301"
"2012-01-11 06:41:35"   "58.1.2.3"  "16453" "794"
"2012-01-12 06:43:50"   "101.1.2.3" "1712"  "410"
"2012-01-13 06:44:04"   "121.1.10.3"    "6594"  "863"
"2012-01-14 06:45:00"   "79.1.2.3"  "879"   "614"

ip_address_table
"starting_ip" "ending_ip" "provider"
"121.0.0.0" "121.255.255.255" provider1
"79.1.2.0" "79.1.2.255" provider1
....
4

1 に答える 1

4

ipテーブルを使用しているようには見えません。おそらく次のようなものを試してください(テストされていません):

SELECT avg(value1),avg(value2)
FROM client_table c, ip_address_table ip
WHERE (INET_ATON(ip) BETWEEN INET_ATON(starting_ip) AND INET_ATON(ending_ip))
GROUP BY DATE(date),HOUR(date)
于 2012-07-04T02:13:00.700 に答える