wiki:AdvancedReport15

Version 2 (modified by 211101, 4 days ago) ( diff )

--

Трендови на трошење според тагови за цел систем

Трендови на трошење за секој таг во последните шест месеци

CREATE OR REPLACE FUNCTION get_spending_trends_last_6_months()
RETURNS TABLE (
    tag_name TEXT,
    month DATE,
    total_spent NUMERIC
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT 
        tg.tag_name, 
        DATE_TRUNC('month', t.date) AS month,
        COALESCE(SUM(tb.spent_amount), 0) AS total_spent
    FROM tag tg
    JOIN tag_assigned_to_transaction tat 
        ON tg.tag_id = tat.tag_id
    JOIN transaction t 
        ON tat.transaction_id = t.transaction_id
    JOIN transaction_breakdown tb 
        ON t.transaction_id = tb.transaction_id
    WHERE t.date >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '6 MONTHS')
    GROUP BY tg.tag_name, month
    ORDER BY tg.tag_name, month;
END;
$$;

Релациона алгебра

  • TG(tag_id, tag_name)
  • TAT(tag_id, transaction_id)
  • T(transaction_id, date)
  • TB(transaction_id, spent_amount)

JOIN на сите табели:

  • J1 ← TG ⨝TG.tag_id = TAT.tag_id TAT
  • J2 ← J1 ⨝TAT.transaction_id = T.transaction_id T
  • J3 ← J2 ⨝T.transaction_id = TB.transaction_id TB

Филтрирање на трансакции од последните 6 месеци:

  • F ← σdate >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '6 MONTHS')(J3)

Групирање по таг и месец:

  • G ← γtag_name, month = DATE_TRUNC('month', date); Σ(spent_amount) → total_spent(F)

Подредување по таг и месец:

  • R_final ← τtag_name, month(G)
Note: See TracWiki for help on using the wiki.