0

次のような sensorvalue というテーブルがあります。

station_id   sensor_id   Timestamp            Value
----------------------------------------------------------
1            1           2013-09-04 12:00:00  12.2
1            2           2013-09-04 12:00:00  13.1
1            3           2013-09-04 12:00:00  13.2
1            1           2013-09-04 12:05:00  12.1
1            2           2013-09-04 12:05:00  14.1
1            3           2013-09-04 12:05:00  13.2
1            1           2013-09-04 12:10:00  12.5
1            2           2013-09-04 12:10:00  13.3
1            3           2013-09-04 12:10:00  14.1

station_id 1 のステーションの 3 つのセンサーすべての最新の値をすべて取得する MySQL クエリが必要です。1 つの MySQL ステートメントでこれが可能かどうか疑問に思います。

テーブルからデータを取得できましたが、効率的な方法ではありません。ここで、最初にステーション 1 のすべての異なるセンサーを SELECT し、その後、センサーごとに別の MySQL SELECT ステートメントを呼び出します。一部のステーションには 10 個を超えるセンサーがあるため、このアプローチでは、データベースからデータを取得するために少なくとも 11 個の MySQL ステートメントが必要です。

これを 1 つの MySQL ステートメントに含めたいと思います。それは可能ですか?そしてどうやって?

4

2 に答える 2

2

これには複数の書き方があります。substring_index()以下は、 /group_concat()トリックを使用した、おそらく最も単純なコードです。

select sensor_id, max(TimeStamp),
       substring_index(group_concat(Value) order by TimeStamp desc), ',', 1) as LastValue
from sensorvalue sv
where station_id = 1
group by sensor_id;

編集:

すべてのタイムスタンプ値は同じように見えます。これが当てはまる場合は、次のこともできます。

select sv.*
from sensorvalue sv
where station_id = 1 and
      timestamp = (select max(timestamp) from sensorvalue where station_id = 1);
于 2013-09-04T15:27:58.660 に答える