Můžete použít první SQL, který jste napsali, ale pro všechny uživatele:
SELECT u.*, b.balance, b.date
FROM users u JOIN balance b ON u.id = b.userId
WHERE b.date = (SELECT MAX(date) FROM balance WHERE userId = u.id);
Možná to není nejrychlejší způsob, jak dosáhnout výsledku, ale dá vám to, co potřebujete. Podobné dotazy používám na několika místech ve své aplikaci.