2017-02-10 27 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几个这样的查询之间。

请注意,此类查询可能会返回一行或零行,因为特定传感器的数据可能尚未提供。