Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - encontre diferença entre linhas da mesma tabela


Aqui está uma solução sem variáveis. Suponho que você tenha seus dados iniciais em uma tabela chamada 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

Aqui obtemos o valor anterior com uma subseleção (o máximo result dos timestamps anteriores do mesmo ip ). IFNULL nos dá um 0 se este for o primeiro valor, então os resultados iniciais são exibidos corretamente.

Também recomendo adicionar o seguinte índice à thetable :
CREATE INDEX sort1 ON thetable (ip, date, time);