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

MySQL - Subtraindo o valor da linha anterior, agrupar por


Trabalhar com variáveis ​​do MySQL é ótimo, é como atribuições de variáveis ​​de programa inline. Primeiro, a cláusula FROM "declara" as variáveis ​​@ para você, deixando o padrão em branco. Em seguida, consulte os registros na ordem esperada que você deseja. Ele faz uma única passagem pelos dados em vez de por meio de subconsultas repetidas que podem consumir muito tempo.

Para cada linha lida, compare o @lastSN com o SN do registro atual. Se for diferente, sempre retorne 0. Se for o mesmo, calcule a diferença simples. Somente DEPOIS que a comparação for feita, defina @lastSN e @lastValue iguais ao do registro atual para a próxima comparação de registros.
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