Här är en lösning utan variabler. Jag antar att du har dina initiala data i en tabell som heter 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
Här får vi det föregående värdet med en subselect (det maximala result
). av de föregående tidsstämplarna från samma ip
). IFNULL
ger oss en 0 om detta var det första värdet, så initiala resultat visas korrekt.
Jag rekommenderar också att du lägger till följande index i thetable
:
CREATE INDEX sort1 ON thetable (ip, date, time);