Последние 5 связанных записей для нескольких записей - PullRequest
0 голосов
/ 06 марта 2011

У меня есть база данных MySQL с такой структурой ...

На сайте много датчиков Датчики имеют много SensorReadings

Я хочу получить все датчики для сайта и последние 5 датчиков для всех этих датчиков. Я подозреваю, что мне придется что-то делать с хранимой процедурой и временными таблицами (если они вообще существуют в MySQL.

Ответы [ 3 ]

2 голосов
/ 06 марта 2011

Возможно Что-то вроде ...

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  

Пожалуйста, укажите фактическую структуру таблицы в вашем вопросе.

1 голос
/ 06 марта 2011

Полный пример использования переменных MySQL. Для краткости это отображает 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;
0 голосов
/ 06 марта 2011

На основе Андомарской свалки

select * from SensorReadings as t1
where (select count(*) from SensorReadings as t2
       where t1.sensorid = t2.sensorid and t2.recordDate > t1.recordDate) <2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...