テーブル「message_route」を含むMySQLデータベースがあります。このテーブルは、デバイスからのメッセージがモデムを見つけてインターネットに出る前に、ハブ間のパスを追跡します。MySQL、GROUP BYを使用して別の値のMAX()に関連付けられた値を確認
「はmessage_route」は、次のカラムがあります。
はid, summary_id, device_id, hub_address, hop_count, event_time
テーブルの各行は、単一の2つのハブ間で「ホップ」を表します。 "device_id"
カラムは、メッセージの発信元のデバイスのIDを示します。 "hub_address"
列は、メッセージホップが受信されたハブのIDを示し、"hop_count"
は、これらのホップを段階的に数えます。メッセージの完全なルートは、"summary_id"
キーで結合されています。説明する表のスニペット:
+-----+------------+-----------+-------------+-----------+---------------------+
| id | summary_id | device_id | hub_address | hop_count | event_time |
+-----+------------+-----------+-------------+-----------+---------------------+
| 180 | 158 | 1099 | 31527 | 1 | 2011-10-01 04:50:53 |
| 181 | 159 | 1676 | 51778 | 1 | 2011-10-01 00:12:04 |
| 182 | 159 | 1676 | 43567 | 2 | 2011-10-01 00:12:04 |
| 183 | 159 | 1676 | 33805 | 3 | 2011-10-01 00:12:04 |
| 184 | 160 | 2326 | 37575 | 1 | 2011-10-01 00:12:07 |
| 185 | 160 | 2326 | 48024 | 2 | 2011-10-01 00:12:07 |
| 186 | 160 | 2326 | 57652 | 3 | 2011-10-01 00:12:07 |
+-----+------------+-----------+-------------+-----------+---------------------+
ここでは合計3つのメッセージがあります。 summary_id = 158
のメッセージは、モデムを見つける前に1つのハブに触れていたので、id = 180
の行はそのメッセージの全レコードです。 Summary_ids 159
と160
にはそれぞれ3つのホップがあり、それぞれが3つの異なるハブに接触します。メッセージが持つことができるホップ数の上限はありません。
メッセージの最後のホップを構成する一意の "hub_address"値のリストを提供するMySQLクエリを作成する必要があります。つまり、各summary_idの最大hop_countに関連付けられたhub_addressです。上記のデータベーススニペットを使用すると、出力は"31527, 33805, 57652"
になります。
私はこれを理解することができませんでした。その間、私はこのコードをプロキシとして使用しています。これは、summary_id = 158
のように、単一のホップのメッセージに固有のhub_address値を与えてくれるだけです。
SELECT DISTINCT(x.hub_address)
FROM (SELECT hub_address, COUNT(summary_id) AS freq
FROM message_route GROUP BY summary_id) AS x
WHERE x.freq = 1;
これはトリックを行うようです!この問題を解決するために「GROUP BY」が必要であると想定されていた間違いを解消する手助けをしてくれてありがとう。 – OnlyDean