Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL — odejmowanie wartości od poprzedniego wiersza, grupowanie według

Praca ze zmiennymi MySQL jest świetna, podobnie jak wbudowane przypisania zmiennych programu. Po pierwsze, klauzula FROM "deklaruje" zmienne @, domyślnie puste. Następnie przeszukuj rekordy w oczekiwanej kolejności. Wykonuje jednokrotne przejście przez dane zamiast powtarzających się podzapytań, co może być czasochłonne.

Dla każdego odczytanego wiersza porównaj @lastSN z SN bieżącego rekordu. Jeśli jest inny, zawsze zwracaj 0. Jeśli jest taki sam, oblicz prostą różnicę. Dopiero PO przeprowadzeniu porównania ustaw @lastSN i @lastValue równe wartości bieżącego rekordu dla następnego porównania rekordów.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień kolejność / zresetuj klucz główny automatycznego przyrostu

  2. Pobranie wszystkich wierszy nadrzędnych w jednym zapytaniu SQL

  3. MySQL TIMEDIFF() vs TIMESTAMPDIFF():jaka jest różnica?

  4. Przewodnik po zrozumieniu wzorców skalowania bazy danych

  5. Jak poprawnie zapisywać ciągi znaków UTF-8 w MySQL za pomocą interfejsu JDBC?