Hier hoe je het kunt doen..
select
s.client_id,
s.date,
s.op_balance as Open_Balance,
s.credit,
s.debit,
s.balance
from
(
select
t.client_id,
t.date,
t.credit,
t.debit,
@tot_credit := if(@prev_client = t.client_id, @tot_credit + t.credit,t.credit) as tot_cred,
@tot_debit := if(@prev_client = t.client_id,@tot_debit + t.debit,t.debit) as tot_deb,
@cur_bal := if(@prev_client = t.client_id, @tot_credit - @tot_debit,t.credit-t.debit) as balance,
(@cur_bal + t.debit) - t.credit as op_balance,
@prev_client := t.client_id
from(
select * from stock order by client_id,date
)t,(select @prev_client:=0,@cur_bal:=0,@tot_credit:=0,@tot_debit:= 0,@open_balance:=0)r
)s
Ik heb ook gemerkt dat dezelfde gegevens die je hebt een datumkolom die ik heb gebruikt om per klant-ID te sorteren, maar het is goed om datetime voor datum te hebben, zodat de sortering niet verward raakt met dezelfde datum of een primaire sleutel kan zijn in de tafel.