Здравствуйте, brank, Вы писали:
B>Непонятно опять, как сделать шаг 1, а именно, как вернуть предпоследнее. Не могли бы вы привести примерный запрос?
это — даты последних показаний для каждого счетчика
select sensor_id, max(td) as maxtd from table1 group by sensor_id
а это — последние показания для каждого счетчика (при условии, что для каждого счетчика не существует больше одного показания за одно и то же время)
select t1.sensor_id, t1.td, t1.val
from
table1 t1
inner join (
select sensor_id, max(td) as maxtd from table1
group by sensor_id) t2
on t1.sensor_id = t2.sensor_id and t1.td = t2.maxtd
для того, чтобы получить _предпоследние_ показания, нужно в предыдущем запросе перед подсчетом max-ов исключить последние показания (выделено италиком)
select t1.sensor_id, t1.td, t1.val
from
table1 t1
inner join (
select sensor_id, max(td) as maxtd from table1
where td < (select max(td) from table1 t3 where t3.sensor_id = table1.sensor_id)
group by sensor_id) t2
on t1.sensor_id = t2.sensor_id and t1.td = t2.maxtd
здесь я пытался использовать наиболее простой язык запросов, поскольку не очень представляю себе возможности используемой вами версии mysql.
p.s. составной индекс по полям source_id, td очень желателен.