Changes between Version 1 and Version 2 of AdvancedReport23


Ignore:
Timestamp:
12/29/25 20:12:35 (5 days ago)
Author:
211101
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport23

    v1 v2  
    1 ===== Годишни трендови на трансакции за корисник
     1==== Годишни трендови на трансакции за корисник
    22Трошења по квартали за тековната година за одреден корисник
    33{{{#!sql
    4 SELECT
    5     ta.account_name,
    6     SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 1 THEN tb.spent_amount ELSE 0 END) AS q1_spent,
    7     SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 2 THEN tb.spent_amount ELSE 0 END) AS q2_spent,
    8     SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 3 THEN tb.spent_amount ELSE 0 END) AS q3_spent,
    9     SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 4 THEN tb.spent_amount ELSE 0 END) AS q4_spent
    10 FROM
    11     transaction_breakdown tb
    12 JOIN transaction t ON tb.transaction_id = t.transaction_id
    13 JOIN transaction_account ta ON tb.transaction_account_id = ta.transaction_account_id
    14 WHERE
    15     ta.user_id = 101 -- ID на конкретниот корисник
    16     AND EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE)
    17 GROUP BY
    18     ta.account_name
    19 ORDER BY
    20     ta.account_name;
     4CREATE OR REPLACE FUNCTION get_quarterly_spending_trends_user(
     5    p_user_id INT
     6)
     7RETURNS TABLE (
     8    account_name TEXT,
     9    q1_spent NUMERIC,
     10    q2_spent NUMERIC,
     11    q3_spent NUMERIC,
     12    q4_spent NUMERIC
     13)
     14LANGUAGE plpgsql
     15AS $$
     16BEGIN
     17    RETURN QUERY
     18    SELECT
     19        ta.account_name,
     20        SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 1 THEN tb.spent_amount ELSE 0 END) AS q1_spent,
     21        SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 2 THEN tb.spent_amount ELSE 0 END) AS q2_spent,
     22        SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 3 THEN tb.spent_amount ELSE 0 END) AS q3_spent,
     23        SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 4 THEN tb.spent_amount ELSE 0 END) AS q4_spent
     24    FROM transaction_breakdown tb
     25    JOIN transaction t
     26        ON tb.transaction_id = t.transaction_id
     27    JOIN transaction_account ta
     28        ON tb.transaction_account_id = ta.transaction_account_id
     29    WHERE ta.user_id = p_user_id
     30      AND EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE)
     31    GROUP BY ta.account_name
     32    ORDER BY ta.account_name;
     33END;
     34$$;
    2135}}}
     36
     37==== Релациона алгебра
     38- TA(transaction_account_id, user_id, account_name)
     39- TB(transaction_id, transaction_account_id, spent_amount)
     40- T(transaction_id, date)
     41
     42JOIN на табелите:
     43- J1 ← TA ⨝,,TA.transaction_account_id = TB.transaction_account_id,, TB
     44- J2 ← J1 ⨝,,TB.transaction_id = T.transaction_id,, T
     45
     46Филтрирање по корисник и тековна година:
     47- F ← σ,,user_id = p_user_id ∧ EXTRACT(YEAR FROM date) = EXTRACT(YEAR FROM CURRENT_DATE),,(J2)
     48
     49Агрегација по квартали:
     50- G ← γ,,account_name; SUM(CASE WHEN EXTRACT(QUARTER FROM date) = 1 THEN spent_amount ELSE 0 END) → q1_spent, SUM(CASE WHEN EXTRACT(QUARTER FROM date) = 2 THEN spent_amount ELSE 0 END) → q2_spent, SUM(CASE WHEN EXTRACT(QUARTER FROM date) = 3 THEN spent_amount ELSE 0 END) → q3_spent, SUM(CASE WHEN EXTRACT(QUARTER FROM date) = 4 THEN spent_amount ELSE 0 END) → q4_spent,,(F)
     51
     52Подредување по име на сметка:
     53- R_final ← τ,,account_name,,(G)