Práce s proměnnými MySQL je skvělá, je to jako přiřazení proměnných v programu. Za prvé, klauzule FROM za vás „deklaruje“ proměnné @, přičemž výchozí hodnota je prázdná. Poté se dotazujte na záznamy v očekávaném pořadí, v jakém je chcete. Provádí jeden průchod daty namísto opakovaných dílčích dotazů, které mohou být časově náročné.
Pro každý přečtený řádek porovnejte @lastSN s SN aktuálního záznamu. Pokud se liší, vždy vraťte 0. Pokud je to stejné, vypočítejte jednoduchý rozdíl. Teprve PO provedení tohoto porovnání nastavte @lastSN a @lastValue na stejnou hodnotu jako u aktuálního záznamu pro další porovnání záznamů.
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