Re[4]: SQL: запрос, чтобы подсчитать производную
От: seregaa Ниоткуда http://blogtani.ru
Дата: 22.01.10 16:30
Оценка:
Здравствуйте, 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 очень желателен.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.