Changes between Version 18 and Version 19 of Напредни извештаи од базата (SQL и складирани процедури)


Ignore:
Timestamp:
02/13/25 11:26:35 (9 days ago)
Author:
222039
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Напредни извештаи од базата (SQL и складирани процедури)

    v18 v19  
    155155    AVG(l.ReturnDate - l.LoanDate) DESC;
    156156}}}
     157
     158=== Извештај за активност на членови ===
     159{{{#!sql
     160WITH DateRanges AS (
     161    SELECT
     162        generate_series(
     163            date_trunc('year', CURRENT_DATE) - interval '5 year',
     164            date_trunc('year', CURRENT_DATE),
     165            interval '1 year'
     166        ) as start_date,
     167        generate_series(
     168            date_trunc('year', CURRENT_DATE) - interval '4 year',
     169            date_trunc('year', CURRENT_DATE),
     170            interval '1 year'
     171        ) as end_date
     172)
     173SELECT
     174    u.FirstName || ' ' || u.LastName as MemberName,
     175    m.Membership_Status,
     176    d.start_date::date as PeriodStart,
     177    d.end_date::date as PeriodEnd,
     178    COUNT(DISTINCT l.LoanID) as TotalLoans,
     179    COUNT(DISTINCT CASE WHEN l.ReturnDate IS NULL THEN l.LoanID END) as ActiveLoans,
     180    COUNT(DISTINCT f.FineID) as TotalFines,
     181    COALESCE(SUM(f.FineAmount), 0) as TotalFineAmount,
     182    COALESCE(SUM(fp.PaymentAmount), 0) as TotalPaidAmount
     183FROM
     184    DateRanges d
     185    CROSS JOIN Member m
     186    JOIN Users u ON m.UserID = u.UserID
     187    LEFT JOIN Loan l ON m.MemberID = l.MemberID
     188        AND l.LoanDate >= d.start_date
     189        AND l.LoanDate < d.end_date
     190    LEFT JOIN Fine f ON l.LoanID = f.LoanID
     191    LEFT JOIN FinePayment fp ON f.FineID = fp.FineID
     192GROUP BY
     193    u.FirstName, u.LastName, m.Membership_Status, d.start_date, d.end_date
     194ORDER BY
     195    d.start_date DESC, TotalLoans DESC;
     196}}}