Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Wert von der vorherigen Zeile subtrahieren, gruppieren nach

Das Arbeiten mit MySQL-Variablen ist großartig, es ist wie die Zuweisung von Inline-Programmvariablen. Erstens "deklariert" die FROM-Klausel die @-Variablen für Sie, standardmäßig leer. Fragen Sie dann die Datensätze in der erwarteten gewünschten Reihenfolge ab. Es führt einen einzigen Durchgang durch die Daten durch, anstatt über wiederholte Unterabfragen, die zeitintensiv sein können.

Vergleichen Sie für jede gelesene Zeile @lastSN mit der SN des aktuellen Datensatzes. Wenn unterschiedlich, immer 0 zurückgeben. Wenn es gleich ist, berechnen Sie die einfache Differenz. Setzen Sie erst NACH diesem Vergleich @lastSN und @lastValue für den nächsten Datensatzvergleich auf den Wert des aktuellen Datensatzes.

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