我有一个名为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
我需要一个MySQL查询,它使用station_id 1获取所有三个站的传感器的所有最新值。我想知道这是否可以用一个MySQL语句。
我已经设法从表中获取数据,但不是以有效的方式。现在我首先为工作站1选择所有不同的传感器,然后再调用传感器的另一个MySQL SELECT语句。有些站有超过10个传感器,所以使用这种方法我需要至少11个MySQL语句来从数据库中获取数据。
我想在一个MySQL语句中包含它。那可能吗?怎么样?
答案 0 :(得分: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);
答案 1 :(得分:0)
检索所有电台上所有传感器的最新读数。
SELECT s.*
FROM (SELECT station_id, sensor_id, MAX(Timestamp) as max_timestamp
FROM sensorvalue
GROUP BY station_id, sensor_id
) m
JOIN sensorvalue s
ON s.station_id = m.station_id
AND s.sensor_id = m.sensor_id
AND s.Timestamp = m.max_timestamp
将其限制为特定电台。
SELECT s.*
FROM (SELECT station_id, sensor_id, MAX(Timestamp) as max_timestamp
FROM sensorvalue
WHERE station_id = 1
GROUP BY station_id, sensor_id
) m
JOIN sensorvalue s
ON s.station_id = m.station_id
AND s.sensor_id = m.sensor_id
AND s.Timestamp = m.max_timestamp