Aquí hay una solución sin variables. Supongo que tiene sus datos iniciales en una tabla llamada 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
Aquí obtenemos el valor anterior con una subselección (el result
máximo de las marcas de tiempo anteriores de la misma ip
). IFNULL
nos da un 0 si este fue el primer valor, por lo que los resultados iniciales se muestran correctamente.
También recomiendo agregar el siguiente índice a thetable
:
CREATE INDEX sort1 ON thetable (ip, date, time);