Đây là cách bạn có thể làm điều đó ..
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
Ngoài ra, tôi nhận thấy rằng cùng một dữ liệu mà bạn có cột ngày tháng mà tôi đã sử dụng để thực hiện sắp xếp cho mỗi id khách hàng, nhưng thật tốt nếu có thời gian cho ngày tháng để việc sắp xếp không bị nhầm lẫn với cùng một ngày hoặc có thể là khóa chính trong bảng.