Вашите дати са неправилни. Когато поръчвате по тази колона, поръчвате първо по дни. Правилното подреждане е година-месец-ден. Използвайте правилния тип данни, дата-час или времеви печат. За да направите това, можете да направите следното:
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`;
Тогава заявката за получаване на желания резултат е:
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;
Всичко, което трябва да направите, е да добавите друга променлива, която да задържи стойността на предишния ред.
- вижте как работи на живо в sqlfiddle
- ето още един sqlfiddle за да покажете какво се случва, когато имате 3 реда на ID