Mysql
 sql >> Base de données >  >> RDS >> Mysql

Soustraire les valeurs de deux lignes dans la même colonne en utilisant le groupe Mysql par ID

Vos dates sont incorrectes. Lorsque vous commandez par cette colonne, vous commandez d'abord par jour. Le bon ordre est année-mois-jour. Utilisez le type de données, la date/heure ou l'horodatage appropriés. Pour ce faire, vous pouvez procéder comme suit :

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 requête pour obtenir le résultat souhaité est alors :

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;

Tout ce que vous avez à faire est d'ajouter une autre variable pour contenir la valeur de la ligne précédente.

  • le voir fonctionner en direct dans un sqlfiddle
  • voici un autre sqlfiddle pour montrer ce qui se passe lorsque vous avez 3 lignes par ID