Your problem is related to greatest-n-per-group tag you need to get the recent one result per user this should do the trick,first get the maximum date and email and then use self join with two conditions like ON(t.email =tt.email AND t.test_date=tt.test_date)
SELECT t.* FROM
test_results t
INNER JOIN (
SELECT email,MAX(test_date) test_date FROM test_results GROUP BY email
) tt ON(t.email =tt.email AND t.test_date=tt.test_date)
ORDER BY t.test_date DESC
In CI you can use query function to run raw query
$this->db->query("SELECT t.* FROM
test_results t
INNER JOIN (
SELECT email,MAX(test_date) test_date FROM test_results GROUP BY email
) tt ON(t.email =tt.email AND t.test_date=tt.test_date)
ORDER BY t.test_date DESC");