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.
- beobachten Sie es live in einem sqlfiddle
- hier ist ein weiteres sqlfiddle um zu zeigen, was passiert, wenn Sie 3 Zeilen pro ID haben