I have a table of Members (member_id, name, etc..) and a table of Membership (id, member_id, membership starting date, membership expiration date) with a relation of one to many, because every year there is a new entry in Membership, per every member.
When I do :
SELECT * FROM members
INNER JOIN membership ON members.member_id = membership.member_id
I obtain multiple records for every member. How can I group records in only one record per member, that contains the MIN of membership starting date and the MAX of membership expiration date? Thank you.
You could do your aggregation from a derived table of membership
. For example:
SELECT m.*, ms.start_date, ms.exp_date
FROM members m
JOIN (SELECT member_id, MIN(start_date) AS start_date, MAX(exp_date) AS exp_date
FROM membership
GROUP BY member_id) ms ON ms.member_id = m.member_id