| 89 | | WITH CumulativeTotalBalances AS ( |
| 90 | | SELECT |
| 91 | | t.transaction_id, |
| 92 | | t.transaction_name, |
| 93 | | t.date AS transaction_date, |
| 94 | | u.user_id, |
| 95 | | u.user_name, |
| 96 | | tb.spent_amount AS transaction_amount, |
| 97 | | SUM(tb.earned_amount - tb.spent_amount) OVER ( |
| 98 | | PARTITION BY u.user_id |
| 99 | | ORDER BY t.date |
| 100 | | ) AS calculated_total_balance |
| 101 | | FROM |
| 102 | | transaction_account ta |
| 103 | | JOIN |
| 104 | | user u ON ta.user_id = u.user_id |
| 105 | | JOIN |
| 106 | | transaction_breakdown tb ON ta.transaction_account_id = tb.transaction_account_id |
| 107 | | JOIN |
| 108 | | transaction t ON tb.transaction_id = t.transaction_id |
| | 89 | CREATE OR REPLACE FUNCTION get_transactions_exceeding_user_total_balance() |
| | 90 | RETURNS TABLE ( |
| | 91 | user_id INT, |
| | 92 | user_name TEXT, |
| | 93 | transaction_id INT, |
| | 94 | transaction_name TEXT, |
| | 95 | transaction_amount NUMERIC, |
| | 96 | transaction_date TIMESTAMP, |
| | 97 | calculated_total_balance NUMERIC |
| 110 | | SELECT |
| 111 | | user_id, |
| 112 | | user_name, |
| 113 | | transaction_id, |
| 114 | | transaction_name, |
| 115 | | transaction_amount, |
| 116 | | transaction_date, |
| 117 | | calculated_total_balance |
| 118 | | FROM |
| 119 | | CumulativeTotalBalances |
| 120 | | WHERE |
| 121 | | transaction_amount > calculated_total_balance -- Трансакцијата го надминува пресметаниот вкупен баланс од сите сметки |
| 122 | | AND transaction_amount > 0 |
| 123 | | ORDER BY |
| 124 | | user_id, transaction_date DESC; |
| | 99 | LANGUAGE plpgsql |
| | 100 | AS $$ |
| | 101 | BEGIN |
| | 102 | RETURN QUERY |
| | 103 | WITH cumulative_totals AS ( |
| | 104 | SELECT |
| | 105 | u.user_id, |
| | 106 | u.user_name, |
| | 107 | t.transaction_id, |
| | 108 | t.transaction_name, |
| | 109 | tb.spent_amount AS transaction_amount, |
| | 110 | t.date AS transaction_date, |
| | 111 | SUM(tb.earned_amount - tb.spent_amount) |
| | 112 | OVER (PARTITION BY u.user_id ORDER BY t.date) |
| | 113 | AS calculated_total_balance |
| | 114 | FROM transaction_account ta |
| | 115 | JOIN "user" u ON ta.user_id = u.user_id |
| | 116 | JOIN transaction_breakdown tb ON ta.transaction_account_id = tb.transaction_account_id |
| | 117 | JOIN transaction t ON tb.transaction_id = t.transaction_id |
| | 118 | ) |
| | 119 | SELECT * |
| | 120 | FROM cumulative_totals |
| | 121 | WHERE transaction_amount > calculated_total_balance |
| | 122 | AND transaction_amount > 0 |
| | 123 | ORDER BY user_id, transaction_date DESC; |
| | 124 | END; |
| | 125 | $$; |