Кратък отговор, да
По-дълъг отговор, можете да използвате променлива, за да я изброите, докато се движи надолу по редовете, т.е.
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
гарантира, че @Balance се инициализира на 0, преди да започнете. За всеки ред след това задава @Balance като @Balance + In - Out
и след това извежда изчислената стойност.
Също така си струва да се уверите, че ПОРЪЧКАТА е последователна, тъй като в противен случай Балансът ще варира в зависимост от реда, в който се връщат редовете. Ако искате след това да го подредите отпред, например, можете да използвате това като подзаявка, тъй като тогава външната заявка се занимава с изчислените стойности, като по този начин гарантира, че балансът остава правилен, т.е.
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