2016-08-25 8 views
0

テーブル「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 159160にはそれぞれ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; 

答えて

2

私はこのようにアプローチします:

select distinct mr.hub_address 
from message_route mr 
where mr.event_time = (select max(mr2.event_time) 
         from message_route mr2 
         where mr2.summary_id = mr.summary_id 
        ); 
+0

これはトリックを行うようです!この問題を解決するために「GROUP BY」が必要であると想定されていた間違いを解消する手助けをしてくれてありがとう。 – OnlyDean

関連する問題