with tx as ( select null as transaction_date, null as date_time_encoded, 1 as balance_effect, 'Opening Balance' as category, '' as memo, opening_balance as amount from account_with_type_opening_balance where (account_id,account_type_id) = ('{3F52FED8-90D1-4249-A04E-42AB49D118F0}', '{960B8DAE-1C4C-432C-96E6-33974B6B2B19}') union all select ws.date_withdrawn_spent, ws.date_time_encoded, -1, ac.account_category_full_description, ws.memo, ws.amount from withdrawn_spent ws join account_category ac on ac.account_category_id = ws.account_category_id where (drawn_from_account_id,drawn_from_account_type_id) = ('{3F52FED8-90D1-4249-A04E-42AB49D118F0}', '{960B8DAE-1C4C-432C-96E6-33974B6B2B19}') union all select ws.date_withdrawn_spent, ws.date_time_encoded, 1, ac.account_category_full_description || ' FX SOURCE-->' || a.account || ':' || c.currency || '(' || atx.account_type || ') ' || to_char(ws.amount, 'FM9,999,999.90') || ' ' || c.currency_symbol || ' #' || to_char(ws.exchange_rate, 'FM9,999,999.90'), ws.memo, ws.transferred_to_amount from withdrawn_spent ws join account_category ac on ac.account_category_id = ws.account_category_id join account a on a.account_id = ws.drawn_from_account_id join currency c on c.currency_id = a.currency_id join account_type atx on atx.account_type_id = ws.drawn_from_account_type_id where (transferred_to_account_id,transferred_to_account_type_id) = ('{3F52FED8-90D1-4249-A04E-42AB49D118F0}', '{960B8DAE-1C4C-432C-96E6-33974B6B2B19}') union all select dr.date_deposited_received, dr.date_time_encoded, 1, ac.account_category_full_description, dr.memo, dr.amount from deposited_received dr join account_category ac on ac.account_category_id = dr.account_category_id where (received_in_account_id,received_in_account_type_id) = ('{3F52FED8-90D1-4249-A04E-42AB49D118F0}', '{960B8DAE-1C4C-432C-96E6-33974B6B2B19}') union all select fx.date_transferred, fx.date_time_encoded, 1, 'FX SOURCE-->' || a.account || ':' || c.currency || '(' || atx.account_type || ') ' || to_char(fx.from_amount,'FM9,999,999.90') || ' ' || c.currency_symbol || ' #' || to_char(fx.exchange_rate, 'FM9,999,999.90'), fx.memo, fx.to_amount from fund_transfer fx join account a on a.account_id = fx.from_account_id join currency c on c.currency_id = a.currency_id join account_type atx on atx.account_type_id = fx.from_account_type_id where (fx.to_account_id,fx.to_account_type_id) = ('{3F52FED8-90D1-4249-A04E-42AB49D118F0}', '{960B8DAE-1C4C-432C-96E6-33974B6B2B19}') union all select fx.date_transferred, fx.date_time_encoded, -1, 'FX DEST-->' || a.account || ':' || c.currency || '(' || atx.account_type || ') ' || to_char(fx.to_amount,'FM9,999,999.90') || ' ' || c.currency_symbol || '#' || fx.exchange_rate, fx.memo, fx.from_amount from fund_transfer fx join account a on a.account_id = fx.to_account_id join currency c on c.currency_id = a.currency_id join account_type atx on atx.account_type_id = fx.to_account_type_id where (fx.from_account_id,fx.from_account_type_id) = ('{3F52FED8-90D1-4249-A04E-42AB49D118F0}', '{960B8DAE-1C4C-432C-96E6-33974B6B2B19}') ), sequenced as ( select transaction_date, date_time_encoded, category, memo, amount, balance_effect, row_number() over(order by transaction_date nulls first, date_time_encoded) as seq from tx ) select transaction_date, date_time_encoded, category, memo, case when balance_effect = -1 then '-' else '+' end as effect, amount, sum(amount * balance_effect) over(order by seq) as balance from sequenced -- order by seq desc -- uncomment this if you want to see it from most recent to least recent limit 30 offset 0
"Simplicity can't be bought later, it must be earned from the start" -- DB
Friday, August 6, 2010
Fairly complex query for running balance
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment