Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Subtraia os valores de duas linhas dentro da mesma coluna usando o grupo Mysql por ID


Suas datas estão incorretas. Quando você ordena por esta coluna, você ordena por dia primeiro. A ordenação adequada é ano-mês-dia. Use o tipo de dados, data/hora ou carimbo de data/hora adequados. Para fazer isso, você pode fazer o seguinte:
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`;

A consulta para obter o resultado desejado é então:
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;

Tudo o que você precisa fazer é adicionar outra variável para manter o valor da linha anterior.
  • veja-o funcionando ao vivo em um sqlfiddle
  • aqui está outro sqlfiddle para mostrar o que acontece quando você tem 3 linhas por ID