SELECT s.username, COUNT(DISTINCT i.invoice) invoices_due
FROM ssm_demo_students s
JOIN ssm_demo_users u ON u.username = s.username
JOIN (SELECT MAX(IF(end_semester < NOW(), semester, null)) last_semester,
MAX(IF(semester <= NOW(), semester, null)) this_semester,
MIN(IF(semester > NOW(), semester, null)) next_semester FROM ssm_demo_semesters) t
LEFT JOIN ssm_demo_registrations r ON r.username = s.username
JOIN ssm_demo_classes c ON (c.class = r.class
AND (c.semester = t.last_semester
OR c.semester = t.this_semester
OR c.semester = t.next_semester
)
)
LEFT JOIN ssm_demo_invoice_recipients i ON i.username = s.username AND i.paid = 0
GROUP BY s.username
ORDER BY u.last_name ASC
LIMIT 0,20;