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

MySQL:restando el valor de la fila anterior, agrupar por

Trabajar con variables de MySQL es genial, es como asignaciones de variables de programa en línea. Primero, la cláusula FROM "declara" las variables @ por usted, por defecto en blanco. Luego consulte los registros en el orden esperado en que los desea. Realiza un solo paso a través de los datos en lugar de subconsultas repetidas que pueden consumir mucho tiempo.

Para cada lectura de fila, compare el @lastSN con el SN del registro actual. Si es diferente, siempre devuelva 0. Si ES el mismo, calcule la diferencia simple. Solo DESPUÉS de realizar la comparación, configure @lastSN y @lastValue iguales a los del registro actual para la siguiente comparación 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