Tôi nghĩ điều này sẽ mang lại cho bạn những gì bạn muốn với phạm vi ngày luân phiên mà bạn lo lắng ... Tôi đã thử nghiệm bằng cách tạo bảng "hóa đơn" của riêng mình với hai cột được xác định. Nó thực sự khá đơn giản với việc sử dụng các biến @ mySQL có thể được sử dụng nội tuyến trong truy vấn ... Điều duy nhất là, bây giờ có một cách thực sự để biết số dư "mở" là gì, vì vậy tôi đã đặt giá trị ban đầu giá trị khởi động bằng 0 rồi điều chỉnh từ đó.
Kicker là truy vấn "PreAgg" để chỉ tổng hợp theo ngày vào / ra. Sau đó, bằng cách sắp xếp kết quả đó theo thứ tự ngày, biến @ sql bắt đầu hoạt động.
select
PreAgg.PostDate,
@PrevBal as BegBal,
PreAgg.OutFlows,
PreAgg.InFlows,
@PrevBal := @PrevBal + PreAgg.OutFlows + PreAgg.InFlows as EndBal
from
( select
i.postdate,
sum( if( i.amount < 0, i.amount, 0 ) ) as OutFlows,
sum( if( i.amount > 0, i.amount, 0 ) ) as InFlows
from
invoice i
where
i.postdate between date_sub( now(), interval 2 month )
and date_add( now(), interval 1 month )
group by
i.postdate
order by
i.postdate ) as PreAgg,
( select @PrevBal := 0.00 ) as SqlVars
Tuy nhiên, mặc dù tôi đã đưa ra thời hạn 3 tháng (-2 tháng, +1 tháng), tôi không nghĩ rằng điều đó thực sự có ý nghĩa vì các bài đăng trong tương lai sẽ chưa xảy ra ... điều quan trọng hơn là chỉ có
where
i.postdate > date_sub( now(), interval 3 month )
sẽ có được 3 tháng qua kể từ ngày / giờ hiện tại.