Eu certamente armazenaria suas assinaturas separadamente de suas informações de membros. Isso não apenas permitirá um registro completo de todas as assinaturas, mas também ajudará se você precisar ter assinaturas de comprimento variável. Sua estrutura de tabelas pode ser algo assim:
subscriptions
-------------
subscription_id integer
member_id integer
start_date date
end_date date
date_paid datetime
Então você pode usar o SQL diretamente para encontrar assinaturas prestes a expirar etc.
SELECT
member_id,
MAX(end_date) as expires_date
FROM
subscriptions
GROUP BY
member_id
HAVING
expires_date < DATE_ADD( CURDATE() INTERVAL 7 DAY )