MySQL: вычисление значения на основе предыдущей выборки значения

Дано: в БД пишутся счетчики прошедших через интерфейс байт нарастающим итогом в байтах

Задача: вычислить загрузку канала в мбит/сек

Решение:

В данном случае нам поможет оконная функция LAG, которая позволяет затаскивать к текущему значению выборки, предыдущее. Например так:

select dt,(cur-pred)/60/1024 as mbit from (
    SELECT 
    dt,value as cur,
    LAG(value) OVER(PARTITION BY value_type order by value) as pred
    FROM m_data WHERE place=10 and source=12 and value_type=7 order by id desc
)  as zx