Ето решение без променливи. Предполагам, че имате началните си данни в таблица, наречена 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);