Voici une solution sans variables. Je suppose que vous avez vos données initiales dans une table appelée 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
Ici, nous obtenons la valeur précédente avec une sous-sélection (le result
maximal des horodatages précédents du même ip
). IFNULL
nous donne un 0 si c'était la première valeur, donc les premiers résultats sont affichés correctement.
Je recommande également d'ajouter l'index suivant à thetable
:
CREATE INDEX sort1 ON thetable (ip, date, time);