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

MySQL - Soustraire la valeur de la ligne précédente, grouper par

Travailler avec des variables MySQL est génial, c'est comme les affectations de variables de programme en ligne. Tout d'abord, la clause FROM "déclare" les variables @ pour vous, par défaut vide. Interrogez ensuite les enregistrements dans l'ordre prévu dans lequel vous les souhaitez. Il effectue un seul passage dans les données au lieu de passer par des sous-requêtes répétées qui peuvent prendre beaucoup de temps.

Pour chaque ligne lue, comparez le @lastSN avec le SN de l'enregistrement en cours. S'il est différent, renvoie toujours 0. Si c'est le même, calcule la différence simple. Seulement APRÈS la fin de la comparaison, définissez @lastSN et @lastValue égales à celles de l'enregistrement actuel pour la prochaine comparaison d'enregistrements.

select
      EL.SN,
      EL.Date,
      EL.Value, --remove duplicate alias
      if( @lastSN = EL.SN, EL.Value - @lastValue, 0000.00 ) as Consumption,
      @lastSN := EL.SN,
      @lastValue := EL.Value
   from
      EnergyLog EL,
      ( select @lastSN := 0,
               @lastValue := 0 ) SQLVars
   order by
      EL.SN,
      EL.Date