sql >> Database >  >> RDS >> Mysql

MySQL - Waarde aftrekken van de vorige rij, groeperen op

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


  1. Hoe de statusbalkkleur in SSMS in te stellen voor verschillende SQL Server-instanties - SQL Server / TSQL-zelfstudie, deel 6

  2. Fix "INSERT heeft meer expressies dan doelkolommen" in PostgreSQL

  3. Oracle-verbindingsreeks zonder tnsnames.ora-bestand

  4. Inleiding tot Firebase