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

Odejmij wartości dwóch wierszy w tej samej kolumnie, używając grupy Mysql według ID

Twoje daty są nieprawidłowe. Kiedy zamawiasz według tej kolumny, najpierw zamawiasz według dnia. Właściwa kolejność to rok-miesiąc-dzień. Użyj odpowiedniego typu danych, daty i godziny lub znacznika czasu. Aby to zrobić, możesz wykonać następujące czynności:

alter table table1 add column d datetime;
update table1 set d = str_to_date(`Date`, '%d-%m-%Y %H:%i');
alter table table1 drop column `Date`;

Zapytanie, aby uzyskać pożądany wynik, to:

SELECT ID, d, Value,
       IF(@ID=ID, Value - @prevV, 'N/A') AS diff,
       @row_number:=CASE WHEN @ID=ID THEN @row_number+1 ELSE 1 END AS row_number,

       @prevV := Value,
       @ID:=ID AS ID
FROM table1
, (SELECT @row_number:=0, @ID:='', @prevV := NULL) AS t 
ORDER BY id, d;

Wszystko, co musisz zrobić, to dodać kolejną zmienną do przechowywania wartości z poprzedniego wiersza.

  • zobacz, jak działa na żywo w sqlfiddle
  • Oto kolejny sqlfiddle aby pokazać, co się dzieje, gdy masz 3 wiersze na identyfikator



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Demon MySQL odmawia startu z Can't start server:Bind na porcie TCP/IP:Adres jest już używany (nie jest).

  2. Jak monitorować bazy danych MySQL/MariaDB za pomocą Netdata w CentOS 7?

  3. Najlepsze wyniki „n” dla każdego słowa kluczowego

  4. PDO-MySQL:wartości logiczne są konwertowane na 1 lub pusty ciąg po wiązaniu przygotowanych instrukcji

  5. jak policzyć wystąpienie słowa w wielu wierszach mysql db