2017-02-10 66 views
0

我想選擇兩個特定值,第一個值是ID_SENSOR爲1的最後一個插入行,第二個值是ID_SENSOR爲2的最後一個插入行。從兩個ID中選擇最後兩個值

我的數據庫表:

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

你必須有兩個單獨的查詢,每個傳感器之一。

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幾個這樣的查詢之間。

請注意,此類查詢可能會返回一行或零行,因爲特定傳感器的數據可能尚未提供。