मुझे लगता है कि यह आपको वह मिलेगा जो आप चाहते हैं, हालांकि एक रोलिंग तिथि सीमा के साथ आप चिंतित हैं ... मैंने पहचान किए गए दो कॉलम के साथ अपनी खुद की "चालान" तालिका बनाकर परीक्षण किया है। यह वास्तव में @ mySQL चर के उपयोग के साथ काफी सरल था जिसका उपयोग क्वेरी में इनलाइन किया जा सकता है ... केवल एक चीज है, अब यह जानने का सही तरीका है कि "ओपनिंग" बैलेंस क्या है, इसलिए मैंने प्रारंभिक सेट किया है शून्य का स्टार्टअप मान फिर उसमें से समायोजित करें।
किकर "प्रीएग" क्वेरी है जिसे केवल इन/आउट की तारीख से एकत्रित करने के लिए है। फिर, उस परिणाम को दिनांक क्रम में क्रमित करके, @ sql चर प्रारंभ हो जाता है।
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
हालांकि, भले ही मैंने 3 महीने की विंडो (-2 महीने, +1 महीने) दी है, मुझे नहीं लगता कि यह वास्तव में समझ में आता है क्योंकि भविष्य की पोस्टिंग अभी तक नहीं हुई होगी ... और क्या महत्वपूर्ण हो सकता है बस
where
i.postdate > date_sub( now(), interval 3 month )
जो वर्तमान दिनांक/समय से अंतिम 3 महीने प्राप्त करेगा।