Вот решение без переменных.Я предполагаю, что у вас есть данные initail в таблице с именем thetable
.
SELECT date, time, ip,
result - IFNULL( (
SELECT MAX( result )
FROM thetable
WHERE ip = t1.ip
AND ( date < t1.date
OR date = t1.date AND time < t1.time )
) , 0) AS diff
FROM thetable AS t1
ORDER BY ip, date, time
Здесь мы получаем предыдущее значение с подвыбором (максимальное result
из предыдущих отметок времени из того же ip
),IFNULL
дает нам 0, если это было первое значение, поэтому начальные результаты отображаются правильно.
Я также рекомендую добавить следующий индекс к thetable
:
CREATE INDEX sort1 ON thetable (ip, date, time);