At arbejde med MySQL-variabler er fantastisk, det er ligesom inline-programvariabler. For det første "erklærer" FROM-sætningen @-variablerne for dig, som standard er blank. Forespørg derefter posterne i den forventede rækkefølge, du ønsker dem. Det foretager en enkelt passage gennem dataene i stedet for via gentagne underforespørgsler, som kan være tidskrævende.
For hver læst række skal du sammenligne @lastSN med SN for den aktuelle post. Hvis det er forskelligt, returner altid 0. Hvis det ER det samme, skal du beregne den simple forskel. Først EFTER den sammenligning er udført, skal du sætte @lastSN og @lastValue lig med den for den aktuelle rekord for den næste postsammenligning.
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