簡単な答え、はい
より長い答えは、変数を使用して、行を反復するときにそれを集計することができます。つまり、
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