sql >> Databáze >  >> RDS >> Mysql

MySQL - Odečtení hodnoty z předchozího řádku, seskupit podle

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


  1. Věci, které musíte vědět o tabulce FND_LOBS v Oracle Apps

  2. Uložená procedura, která automaticky odstraňuje řádky starší než 7 dní v MYSQL

  3. Vytvoření sha1-hash řádku v Oracle

  4. Postgres Tipy A Triky