Mysql
 sql >> Database >  >> RDS >> Mysql

Sottrarre i valori di due righe all'interno della stessa colonna utilizzando il gruppo Mysql per ID

Le tue date non sono corrette. Quando ordini in base a questa colonna, ordini prima per giorno. L'ordine corretto è anno-mese-giorno. Utilizzare il tipo di dati, la data e l'ora o il timestamp corretti. Per fare ciò puoi fare quanto segue:

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`;

La query per ottenere il risultato desiderato è quindi:

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;

Tutto quello che devi fare è aggiungere un'altra variabile per mantenere il valore della riga precedente.