Réponse courte, oui
Réponse plus longue, vous pouvez utiliser une variable pour l'additionner au fur et à mesure qu'elle parcourt les lignes, c'est-à-dire
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
Le , (SELECT @Balance := 0) AS variableInit
garantit que @Balance est initialisé à 0 avant de commencer. Pour chaque ligne, il définit ensuite @Balance sur @Balance + In - Out
, puis affiche la valeur calculée.
Il convient également de s'assurer que ORDER est cohérent, sinon le solde variera en fonction de l'ordre dans lequel les lignes sont renvoyées. Si vous vouliez ensuite l'ordonner à l'envers, par exemple, vous pouvez l'utiliser comme sous-requête, car la requête externe traite les valeurs calculées, garantissant ainsi que le solde reste correct, c'est-à-dire
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