Dina datum är felaktiga. När du beställer efter denna kolumn beställer du efter dag först. Korrekt beställning är år-månad-dag. Använd rätt datatyp, datumtid eller tidsstämpel. För att göra detta kan du göra följande:
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`;
Frågan för att få ditt önskade resultat är då:
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;
Allt du behöver göra är att lägga till ytterligare en variabel för att behålla värdet på föregående rad.
- se det fungera live i en sqlfiddle
- här är en annan sqlfiddle för att visa upp vad som händer när du har 3 rader per ID