Ecco una soluzione senza variabili. Presumo che tu abbia i tuoi dati iniziali in una tabella chiamata 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
Qui otteniamo il valore precedente con una sottoselezione (il massimo result
dei timestamp precedenti dallo stesso ip
). IFNULL
ci dà uno 0 se questo era il primo valore, quindi i risultati iniziali vengono visualizzati correttamente.
Consiglio anche di aggiungere il seguente indice a thetable
:
CREATE INDEX sort1 ON thetable (ip, date, time);