sql >> Database teknologi >  >> RDS >> Mysql

MySQL - Træk værdi fra forrige række, grupper efter

At arbejde med MySQL-variabler er fantastisk, det er ligesom inline-programvariabler. For det første "erklærer" FROM-sætningen @-variablerne for dig, som standard er blank. Forespørg derefter posterne i den forventede rækkefølge, du ønsker dem. Det foretager en enkelt passage gennem dataene i stedet for via gentagne underforespørgsler, som kan være tidskrævende.

For hver læst række skal du sammenligne @lastSN med SN for den aktuelle post. Hvis det er forskelligt, returner altid 0. Hvis det ER det samme, skal du beregne den simple forskel. Først EFTER den sammenligning er udført, skal du sætte @lastSN og @lastValue lig med den for den aktuelle rekord for den næste postsammenligning.

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. Cloud Vendor Deep-Dive:PostgreSQL på Microsoft Azure

  2. Tilslutning af PolyBase til Salesforce.com

  3. Hvordan kan jeg KUN vælge poster fra i går?

  4. Sådan forbedres ydeevnen for SQLite-databasen til Android