sql >> Base de Datos >  >> RDS >> Mysql

MySQL:encuentra la diferencia entre las filas de la misma tabla

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);