Changes between Version 1 and Version 2 of AdvancedReport14


Ignore:
Timestamp:
12/29/25 19:53:12 (4 days ago)
Author:
211101
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport14

    v1 v2  
    1 ===== Долг на кредитна картичка од минатиот месец за корисник
     1==== Долг на кредитна картичка од минатиот месец за корисник
    22Потрошено од сметки означени како „кредитна картичка“ за минатиот месец за еден корисник
    33{{{#!sql
    4 SELECT
    5     SUM(tb.spent_amount) AS credit_card_debt
    6 FROM
    7     transaction_breakdown tb
    8 JOIN transaction_account ta ON tb.transaction_account_id = ta.transaction_account_id
    9 JOIN transaction t ON tb.transaction_id = t.transaction_id
    10 WHERE
    11     ta.user_id = 101 -- ID на конкретниот корисник
    12     AND (ta.account_name ILIKE '%кредитна%' OR ta.account_name ILIKE '%credit%')
    13     AND EXTRACT(MONTH FROM t.date) = EXTRACT(MONTH FROM CURRENT_DATE - INTERVAL '1 MONTH')
    14     AND EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE - INTERVAL '1 MONTH');
     4CREATE OR REPLACE FUNCTION get_credit_card_debt_last_month_user(
     5    p_user_id INT
     6)
     7RETURNS TABLE (
     8    credit_card_debt NUMERIC
     9)
     10LANGUAGE plpgsql
     11AS $$
     12BEGIN
     13    RETURN QUERY
     14    SELECT
     15        COALESCE(SUM(tb.spent_amount), 0) AS credit_card_debt
     16    FROM transaction_breakdown tb
     17    JOIN transaction_account ta
     18        ON tb.transaction_account_id = ta.transaction_account_id
     19    JOIN transaction t
     20        ON tb.transaction_id = t.transaction_id
     21    WHERE ta.user_id = p_user_id
     22      AND (ta.account_name ILIKE '%кредитна%' OR ta.account_name ILIKE '%credit%')
     23      AND EXTRACT(MONTH FROM t.date) = EXTRACT(MONTH FROM CURRENT_DATE - INTERVAL '1 MONTH')
     24      AND EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE - INTERVAL '1 MONTH');
     25END;
     26$$;
    1527}}}
     28
     29==== Релациона алгебра
     30- TA(transaction_account_id, user_id, account_name)
     31- TB(transaction_id, transaction_account_id, spent_amount)
     32- T(transaction_id, date)
     33
     34JOIN на сите табели:
     35- J1 ← TA ⨝,,TA.transaction_account_id = TB.transaction_account_id,, TB
     36- J2 ← J1 ⨝,,TB.transaction_id = T.transaction_id,, T
     37
     38Филтрирање по корисник, кредитна картичка и минат месец:
     39- F ← σ,,user_id = p_user_id ∧ (account_name ILIKE '%кредитна%' OR account_name ILIKE '%credit%') ∧ EXTRACT(MONTH FROM date) = EXTRACT(MONTH FROM CURRENT_DATE - INTERVAL '1 MONTH') ∧ EXTRACT(YEAR FROM date) = EXTRACT(YEAR FROM CURRENT_DATE - INTERVAL '1 MONTH'),,(J2)
     40
     41Агрегација на вкупен долг:
     42- R_final ← γ,,; SUM(spent_amount) → credit_card_debt,,(F)