Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - Sottrarre il valore dalla riga precedente, raggruppare per

Lavorare con le variabili MySQL è fantastico, è come le assegnazioni di variabili di programma inline. Innanzitutto, la clausola FROM "dichiara" le variabili @ per te, per impostazione predefinita vuota. Quindi interroga i record nell'ordine previsto in cui li desideri. Esegue un singolo passaggio attraverso i dati invece che tramite sottoquery ripetute che possono richiedere molto tempo.

Per ogni riga letta, confronta @lastSN con l'SN del record corrente. Se diverso, restituisce sempre 0. Se è lo stesso, calcola la differenza semplice. Solo DOPO aver eseguito il confronto, imposta @lastSN e @lastValue uguali a quelli del record corrente per il confronto dei record successivi.

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