Changes between Version 1 and Version 2 of AdvancedReport4


Ignore:
Timestamp:
12/29/25 18:40:28 (5 days ago)
Author:
211101
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport4

    v1 v2  
    11===== Надминување на вкупниот баланс на сите сметки на корисникот во сегашно време
    2 Овде ќе го собереме моменталниот баланс на сите сметки на корисникот и ќе провериме дали сумата на моменталната трансакцијата ја надминува таа вкупна вредност
     2Овде ќе го собереме моменталниот баланс на сите сметки на корисникот и ќе провериме дали сумата на моменталната трансакцијата ја надминува вкупна вредност
    33{{{#!sql
    4 WITH total_user_balance AS (
    5     SELECT
     4CREATE OR REPLACE FUNCTION get_current_user_total_balance_overdrafts()
     5RETURNS TABLE (
     6    user_id INT,
     7    user_name TEXT,
     8    transaction_id INT,
     9    transaction_amount NUMERIC,
     10    user_total_balance NUMERIC
     11)
     12LANGUAGE plpgsql
     13AS $$
     14BEGIN
     15    RETURN QUERY
     16    WITH total_user_balance AS (
     17        SELECT
     18            u.user_id,
     19            SUM(ta.balance) AS total_balance
     20        FROM transaction_account ta
     21        JOIN "user" u ON ta.user_id = u.user_id
     22        GROUP BY u.user_id
     23    )
     24    SELECT
    625        u.user_id,
    7         SUM(ta.balance) AS total_balance
    8     FROM
    9         transaction_account ta
    10     JOIN user u ON ta.user_id = u.user_id
    11     GROUP BY
    12         u.user_id
    13 )
    14 SELECT
    15     u.user_id,
    16     u.user_name,
    17     SUM(tb.spent_amount) AS total_transaction_amount,
    18     tub.total_balance AS user_total_balance
    19 FROM
    20     transaction_account ta
    21 JOIN user u ON ta.user_id = u.user_id
    22 JOIN transaction_breakdown tb ON ta.transaction_account_id = tb.transaction_account_id
    23 JOIN transaction t ON tb.transaction_id = t.transaction_id
    24 JOIN total_user_balance tub ON u.user_id = tub.user_id
    25 WHERE
    26     t.date <= CURRENT_DATE -- Само активни трансакции до денешен датум
    27 GROUP BY
    28     u.user_id, u.user_name, tub.total_balance
    29 HAVING
    30     SUM(tb.spent_amount) > tub.total_balance -- Трансакциите го надминуваат ВКУПНИОТ моментален баланс
    31 ORDER BY
    32     u.user_id;
     26        u.user_name,
     27        t.transaction_id,
     28        tb.spent_amount AS transaction_amount,
     29        tub.total_balance AS user_total_balance
     30    FROM transaction_account ta
     31    JOIN "user" u ON ta.user_id = u.user_id
     32    JOIN transaction_breakdown tb ON ta.transaction_account_id = tb.transaction_account_id
     33    JOIN transaction t ON tb.transaction_id = t.transaction_id
     34    JOIN total_user_balance tub ON u.user_id = tub.user_id
     35    WHERE
     36        tb.spent_amount > tub.total_balance
     37        AND tb.spent_amount > 0
     38        AND t.date <= CURRENT_DATE;
     39END;
     40$$;
    3341}}}
     42
     43==== Релациона алгебра
     44- U(user_id, user_name)
     45- TA(transaction_account_id, user_id, balance)
     46- TB(transaction_id, transaction_account_id, spent_amount)
     47- T(transaction_id, date)
     48
     49JOIN за пресметка на вкупен моментален баланс по корисник:
     50- J1 ← TA ⨝,,TA.user_id = U.user_id,, U
     51- TBAL ← γ,,user_id; Σ(balance) → total_balance,,(J1)
     52
     53JOIN на сите табели за трансакции:
     54- J2 ← TA ⨝,,TA.user_id = U.user_id,, U
     55- J3 ← J2 ⨝,,TA.transaction_account_id = TB.transaction_account_id,, TB
     56- J4 ← J3 ⨝,,TB.transaction_id = T.transaction_id,, T
     57- J5 ← J4 ⨝,,U.user_id = TBAL.user_id,, TBAL
     58
     59Филтрирање на трансакции кои го надминуваат ВКУПНИОТ моментален баланс:
     60- R ← σ,,spent_amount > total_balance ∧ spent_amount > 0 ∧ date ≤ CURRENT_DATE,,(J5)
     61
     62Подредување по корисник:
     63- R_final ← τ,,user_id,,(R)
     64