sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Subtrahera värde från föregående rad, gruppera efter

Att arbeta med MySQL-variabler är fantastiskt, det är som inline-programvariabeltilldelningar. Först "deklarerar" FROM-satsen @-variablerna åt dig, som standard är tom. Fråga sedan posterna i den förväntade ordning du vill ha dem. Den gör en enda passage genom data istället för via upprepade underfrågor som kan vara tidskrävande.

För varje läst rad, jämför @lastSN med SN för den aktuella posten. Om olika, returnera alltid 0. Om det ÄR samma, beräkna den enkla skillnaden. Först EFTER att jämförelsen är gjord, ställ in @lastSN och @lastValue lika med det för den aktuella posten för nästa postjämförelse.

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. Ansluter AnySQL Maestro till Salesforce.com

  2. Ta bort dubbletter av rader från en tabell

  3. Hur man reparerar MySQL-databaser och tabeller

  4. Hur man konverterar en sträng till ett datum/tid i SQL Server med hjälp av PARSE()