Câu trả lời ngắn gọn, có
Câu trả lời dài hơn, bạn có thể sử dụng một biến để kiểm đếm nó khi nó lặp xuống các hàng, tức là
SELECT
`table`.`ID`,
`table`.`In`,
`table`.`Out`,
@Balance := @Balance + `table`.`In` - `table`.`Out` AS `Balance`
FROM `table`, (SELECT @Balance := 0) AS variableInit
ORDER BY `table`.`ID` ASC
, (SELECT @Balance := 0) AS variableInit
đảm bảo rằng @Balance được khởi tạo bằng 0 trước khi bạn bắt đầu. Đối với mỗi hàng, nó đặt @Balance thành @Balance + In - Out
, và sau đó xuất ra giá trị được tính toán.
Ngoài ra, cần đảm bảo ĐƠN ĐẶT HÀNG nhất quán vì nếu không, Số dư sẽ thay đổi tùy thuộc vào thứ tự mà các hàng được trả lại. Ví dụ:nếu bạn muốn đặt nó trở lại trước, bạn có thể sử dụng điều này như một truy vấn con vì sau đó truy vấn bên ngoài xử lý các giá trị được tính toán, do đó đảm bảo Số dư vẫn chính xác, tức là
SELECT
`balanceCalculation`.`ID`,
`balanceCalculation`.`In`,
`balanceCalculation`.`Out`,
`balanceCalculation`.`Balance`
FROM (
SELECT
`table`.`ID`,
`table`.`In`,
`table`.`Out`,
@Balance := @Balance + `table`.`In` - `table`.`Out` AS `Balance`
FROM `table`, (SELECT @Balance := 0) AS variableInit
ORDER BY `table`.`ID` ASC
) AS `balanceCalculation`
ORDER BY `balanceCalculation`.`ID` DESC