Navrhoval bych, že jste ve své tabulce neuložili dostatek dat.
Jak je tomu nyní, vždy se budete muset podívat na každou předchozí platbu, abyste se ujistili, zda je aktuální platba aktivní nebo čeká na aktivaci, velký zásah do výkonu a složitější dotaz.
Vypočtený expires_at
sloupec pro payments
, která je vypracována přidáním nové platby jako MAX(payments.expires_at) + INTERVAL service_plans.days DAYS
vám umožní zjistit počet zbývajících dní pohledem pouze na jeden řádek... a zda má uživatel plán.