我有这样的结构的MySQL数据库...最近5个相关记录多个记录
网站有很多传感器 传感器有许多SensorReadings
我想获得一个网站的所有传感器和所有这些传感器的最后5次SensorReading。我怀疑,我将不得不做一些与存储过程和临时表(如果他们甚至在MySQL存在。
我有这样的结构的MySQL数据库...最近5个相关记录多个记录
网站有很多传感器 传感器有许多SensorReadings
我想获得一个网站的所有传感器和所有这些传感器的最后5次SensorReading。我怀疑,我将不得不做一些与存储过程和临时表(如果他们甚至在MySQL存在。
可能Something like ...
SELECT reading,
date
FROM (select sensor_id,
reading,
date,
@num := if(@sensor_id = sensor_id, @num + 1, 1) as row_number,
@sensor_id := sensor_id as dummy
from sensor_readings
order by sensor_id,
date desc) T
WHERE row_number<=5
请给你的实际的表结构(S )在您的问题。
完整的示例。为简便起见,这显示每个传感器顶端2的读数。
drop table if exists Sensors;
create table Sensors (Id int);
insert Sensors (id) values (1), (2), (3);
drop table if exists SensorReadings;
create table SensorReadings (SensorId int, RecordDate date);
insert SensorReadings (SensorId, RecordDate) values
(1, '2011-01-01'),
(1, '2011-01-02'),
(1, '2011-01-03'),
(2, '2011-01-01'),
(2, '2011-01-02'),
(2, '2011-01-03');
set @num = -1;
set @SensorId = -1;
select *
from Sensors s
join (
select *
, @num := if(@SensorId = SensorId, @num + 1, 1) as rn
, @SensorId := SensorId
from SensorReadings sr
order by
SensorId
, RecordDate desc
) as numbered
on numbered.SensorId = s.Id
where numbered.rn < 3;
基于Andomar转储
select * from SensorReadings as t1
where (select count(*) from SensorReadings as t2
where t1.sensorid = t2.sensorid and t2.recordDate > t1.recordDate) <2
感谢球员们,我还没有机会测试任何这些答案,但我希望在接下来的几天里有时间并接受一个答案。本 – BenCr 2011-03-08 09:57:25