Kort antwoord, ja
Langer antwoord, je kunt een variabele gebruiken om het op te tellen terwijl het door de rijen itereert, d.w.z.
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
De , (SELECT @Balance := 0) AS variableInit
zorgt ervoor dat @Balance wordt geïnitialiseerd op 0 voordat u begint. Voor elke rij wordt @Balance vervolgens ingesteld op @Balance + In - Out
en voert vervolgens de berekende waarde uit.
Het is ook de moeite waard om ervoor te zorgen dat de BESTELLING consistent is, omdat anders het saldo zal variëren afhankelijk van de volgorde waarin de rijen worden geretourneerd. Als u het dan bijvoorbeeld van achteren naar voren wilt bestellen, kunt u dit als een subquery gebruiken, aangezien de buitenste query dan de berekende waarden behandelt en er zo voor zorgt dat het saldo correct blijft, d.w.z.
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