242 | | * π MemberName, Membership_Status, PeriodStart, PeriodEnd, TotalLoans, ActiveLoans, TotalFines, TotalFineAmount, TotalPaidAmount |
243 | | * (σ (DateRanges ⨯ Member ⨝ Users ⨝ (Loan ⨝ Fine ⨝ FinePayment)) |
244 | | * (γ MemberName, Membership_Status, PeriodStart, PeriodEnd; COUNT(LoanID) AS TotalLoans, COUNT(CASE WHEN ReturnDate IS NULL THEN LoanID END) AS ActiveLoans, COUNT(FineID) AS TotalFines, SUM(FineAmount) AS TotalFineAmount, SUM(PaymentAmount) AS TotalPaidAmount) |
245 | | * (ORDER BY PeriodStart DESC, TotalLoans DESC) |
| 242 | π_{MemberName, Membership_Status, PeriodStart, PeriodEnd, TotalLoans, ActiveLoans, TotalFines, TotalFineAmount, TotalPaidAmount} |
| 243 | (τ_{PeriodStart DESC, TotalLoans DESC} |
| 244 | (γ_{FirstName, LastName, Membership_Status, start_date, end_date} |
| 245 | (σ_{Loan.LoanDate ≥ start_date ∧ Loan.LoanDate < end_date} |
| 246 | (DateRanges × Member ⨝_{Member.UserID = Users.UserID} Users |
| 247 | ⟕_{Member.MemberID = Loan.MemberID} Loan |
| 248 | ⟕_{Loan.LoanID = Fine.LoanID} Fine |
| 249 | ⟕_{Fine.FineID = FinePayment.FineID} FinePayment |
| 250 | ) |
| 251 | ) |
| 252 | COUNT(DISTINCT Loan.LoanID) → TotalLoans, |
| 253 | COUNT(DISTINCT σ_{Loan.ReturnDate IS NULL} (Loan.LoanID)) → ActiveLoans, |
| 254 | COUNT(DISTINCT Fine.FineID) → TotalFines, |
| 255 | COALESCE(SUM(Fine.FineAmount), 0) → TotalFineAmount, |
| 256 | COALESCE(SUM(FinePayment.PaymentAmount), 0) → TotalPaidAmount |
| 257 | ) |
| 258 | ) |