2017-02-10 7 views
0

2つの特定の値を選択したい。最初の値はID_SENSORが1で最後に挿入された行で、2番目の値はID_SENSORが2で最後に挿入された行です。2つのIDから最後の2つの値を選択する

私のデータベーステーブル:

enter image description here

マイクエリ:私のクエリからちょうど最後の値を印刷している

SELECT DATA FROM (SELECT * FROM registovalores WHERE ID_SENSOR = '1' OR ID_SENSOR = '2' ORDER BY ID_SENSOR DESC LIMIT 2) as r ORDER BY TIMESTAMP 

ID_SENSOR 1は、最後に挿入された値だけを取得していて、両方のIDSから最後に挿入された値ではありません。

私はこのような私の値を印刷したいと思います:

ID_SENSOR 1 = 90 
ID SENSOR 2 = 800 

私は私のクエリに変更する必要がありますか?

ありがとうございます。

答えて

0

一つの方法は、相関副問合せを使用しています。

SELECT rv.* 
FROM registovalores rv 
WHERE rv.ID_SENSOR IN (1, 2) AND 
     rv.TIMESTAMP = (SELECT MAX(rv2.TIMESTAMP) 
         FROM registovalores rv2 
         WHERE rv.ID_SENSOR = rv2.ID_SENSOR 
        ); 
+0

「フィールドリスト」に「rv2.TIMESTAMP」という不明な列があります。おそらくrv2が宣言されていません – user3647731

+0

今、正常に動作しています、ありがとう、 – user3647731

0

は、次の2つの別々のクエリ、センサーごとに1つずつ持っている必要があります。

select id_sensor, data 
from the_table 
where id_sensor = 'sensor_1' 
order by timestamp desc -- the latest value is the first to come 
limit 1; -- only pick the top (latest) row. 

あなたは、単一のデータベース・ラウンドトリップで複数の値を照会したい場合

は、いくつかのようなクエリの間 union allを使用することを検討してください。

このようなクエリでは、特定のセンサーのデータがまだ利用できない可能性があるため、1行または0行が返されることがあります。