Можете да използвате първия написан от вас SQL, но за всички потребители:
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);
Това може да не е най-бързият начин да получите резултата, но ще ви даде това, от което се нуждаете. Използвам подобни заявки на доста места в приложението си.