Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Trừ các giá trị của hai hàng trong cùng một cột bằng cách sử dụng nhóm Mysql theo ID

Ngày của bạn không chính xác. Khi bạn đặt hàng theo cột này, bạn đặt hàng theo ngày trước. Thứ tự thích hợp là năm-tháng-ngày. Sử dụng loại dữ liệu, ngày giờ hoặc dấu thời gian thích hợp. Để làm điều này, bạn có thể làm như sau:

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`;

Sau đó, truy vấn để nhận được kết quả mong muốn của bạn là:

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;

Tất cả những gì bạn phải làm là thêm một biến khác để giữ giá trị của hàng trước đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có giới hạn bộ nhớ nào cho phương thức json_encode () không?

  2. CHÈN ... CHỌN, InnoDB và khóa

  3. Không thể khôi phục bản sao lưu MYSQL vào Cơ sở dữ liệu mới

  4. Tính giá trị phần trăm bằng MySQL

  5. MariaDB:Tôi có thể lấy lại các tên cột trùng lặp mà không sử dụng 'AS' không