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

Subtrahieren Sie die Werte zweier Zeilen innerhalb derselben Spalte mit Mysql group by ID

Ihre Daten sind falsch. Wenn Sie nach dieser Spalte bestellen, bestellen Sie zuerst nach Tag. Die richtige Reihenfolge ist Jahr-Monat-Tag. Verwenden Sie den richtigen Datentyp, datetime oder timestamp. Dazu können Sie Folgendes tun:

alter table table1 add column d datetime;
update table1 set d = str_to_date(`Date`, '%d-%m-%Y %H:%i');
alter table table1 drop column `Date`;

Die Abfrage, um Ihr gewünschtes Ergebnis zu erhalten, lautet dann:

SELECT ID, d, Value,
       IF(@ID=ID, Value - @prevV, 'N/A') AS diff,
       @row_number:=CASE WHEN @ID=ID THEN @row_number+1 ELSE 1 END AS row_number,

       @prevV := Value,
       @ID:=ID AS ID
FROM table1
, (SELECT @row_number:=0, @ID:='', @prevV := NULL) AS t 
ORDER BY id, d;

Sie müssen lediglich eine weitere Variable hinzufügen, die den Wert der vorherigen Zeile enthält.