Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Finden Sie den Unterschied zwischen Zeilen derselben Tabelle

Hier ist eine Lösung ohne Variablen. Ich nehme an, Sie haben Ihre Anfangsdaten in einer Tabelle namens 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

Hier erhalten wir den vorherigen Wert mit einem Subselect (das maximale result der vorhergehenden Zeitstempel von derselben ip ). IFNULL gibt uns eine 0, wenn dies der erste Wert war, sodass anfängliche Ergebnisse korrekt angezeigt werden.

Ich empfehle auch, den folgenden Index zu thetable hinzuzufügen :

CREATE INDEX sort1 ON thetable (ip, date, time);