Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:trova la differenza tra le righe della stessa tabella

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