SELECT a.cid, a.name, a.mobile, MAX(b.date), b.balance FROM account AS a INNER JOIN balance AS b WHERE a.cid=b.cid GROUP BY cid;
Sorry, I do not see the balance column in the third table.
SELECT a.cid, a.name, a.mobile, b.date, b.balance FROM account AS a INNER JOIN ( SELECT c.date, c.cid, c.balance FROM balance AS c INNER JOIN ( SELECT cid AS cid2, MAX(date) AS date2 FROM balance GROUP BY cid2) AS d ON c.cid=d.cid2 AND c.date=d.date2 ) AS b ON a.cid=b.cid GROUP BY cid;
source share