Werken met MySQL-variabelen is geweldig, het is net als inline toewijzingen van programmavariabelen. Ten eerste "declareert" de FROM-component de @-variabelen voor u, standaard blanco. Vraag vervolgens de records op in de verwachte volgorde waarin u ze wilt hebben. Het maakt een enkele doorgang door de gegevens in plaats van via herhaalde subquery's, wat tijdrovend kan zijn.
Vergelijk voor elke gelezen rij de @lastSN met de SN van het huidige record. Als het anders is, retourneer dan altijd 0. Als het hetzelfde IS, bereken dan het eenvoudige verschil. Pas NADAT de vergelijking is voltooid, stelt u de @lastSN en @lastValue gelijk aan die van het huidige record voor de volgende recordsvergelijking.
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