Changes between Version 1 and Version 2 of AdvancedReport8


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

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport8

    v1 v2  
    1 ===== Просечно трошење во последните 3 дена за цел систем
     1==== Просечно трошење во последните 3 дена за цел систем
    22Просечно дневно трошење за последните три дена, земајќи ги предвид сите трансакции:
    33{{{#!sql
    4 SELECT
    5     AVG(daily_spending) AS average_spending_last_3_days
    6 FROM (
    7     SELECT
    8         t.date::date AS transaction_date,
    9         SUM(tb.spent_amount) AS daily_spending
    10     FROM
    11         transaction t
    12     JOIN
    13         transaction_breakdown tb ON t.transaction_id = tb.transaction_id
    14     WHERE
    15         t.date >= CURRENT_DATE - INTERVAL '2 DAY'
    16         AND t.date < CURRENT_DATE + INTERVAL '1 DAY'
    17     GROUP BY
    18         t.date::date
    19 ) daily_totals;
     4CREATE OR REPLACE FUNCTION get_average_daily_spending_last_3_days_fixed()
     5RETURNS TABLE (
     6    average_spending_last_3_days NUMERIC
     7)
     8LANGUAGE plpgsql
     9AS $$
     10BEGIN
     11    RETURN QUERY
     12    SELECT
     13        SUM(daily_spending) / 3 AS average_spending_last_3_days
     14    FROM (
     15        SELECT
     16            d.day::date AS transaction_date,
     17            COALESCE(SUM(tb.spent_amount), 0) AS daily_spending
     18        FROM (
     19            SELECT CURRENT_DATE - 2 AS day
     20            UNION ALL
     21            SELECT CURRENT_DATE - 1
     22            UNION ALL
     23            SELECT CURRENT_DATE
     24        ) d
     25        LEFT JOIN transaction t
     26            ON t.date::date = d.day
     27        LEFT JOIN transaction_breakdown tb
     28            ON t.transaction_id = tb.transaction_id
     29        GROUP BY d.day
     30    ) daily_totals;
     31END;
     32$$;
    2033}}}
     34
     35==== Релациона алгебра
     36- T(transaction_id, date)
     37- TB(transaction_id, spent_amount)
     38- D(day)   -- генерирана релација со последните 3 дена
     39
     40Генерирање на последните 3 дена:
     41- D ← { CURRENT_DATE − 2, CURRENT_DATE − 1, CURRENT_DATE }
     42
     43LEFT JOIN со трансакции:
     44- J1 ← D ⟕,,DATE(T.date) = D.day,, T
     45- J2 ← J1 ⟕,,T.transaction_id = TB.transaction_id,, TB
     46
     47Групирање по ден и пресметка на дневно трошење:
     48- G ← γ,,day; Σ(spent_amount) → daily_spending,,(J2)
     49
     50Пресметка на просек (фиксно делење со 3):
     51- R_final ← γ,,; (Σ(daily_spending) / 3) → average_spending_last_3_days,,(G)