Kurze Antwort, ja
Längere Antwort, Sie können eine Variable verwenden, um sie zu zählen, während sie die Zeilen nach unten durchläuft, dh
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
Der , (SELECT @Balance := 0) AS variableInit
stellt sicher, dass @Balance auf 0 initialisiert wird, bevor Sie beginnen. Für jede Zeile wird dann @Balance auf @Balance + In - Out
gesetzt , und gibt dann den berechneten Wert aus.
Es lohnt sich auch sicherzustellen, dass die ORDER konsistent ist, da sonst der Saldo je nach Reihenfolge der zurückgegebenen Zeilen variiert. Wenn Sie es dann beispielsweise von hinten nach vorne ordnen möchten, können Sie dies als Unterabfrage verwenden, da sich die äußere Abfrage dann mit den berechneten Werten befasst und so sicherstellt, dass der Saldo korrekt bleibt, d. H.
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