sql >> Base de Datos >  >> RDS >> Mysql

Reste los valores de dos filas dentro de la misma columna usando el grupo Mysql por ID

Tus fechas son incorrectas. Cuando ordena por esta columna, primero ordena por día. El orden correcto es año-mes-día. Utilice el tipo de datos, la fecha y la hora o la marca de tiempo adecuados. Para ello puedes hacer lo siguiente:

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 consulta para obtener el resultado deseado es entonces:

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;

Todo lo que tiene que hacer es agregar otra variable para mantener el valor de la fila anterior.

  • véalo funcionando en vivo en un sqlfiddle
  • aquí hay otro sqlfiddle para mostrar lo que sucede cuando tiene 3 filas por ID