capita perché mySQL non è così stringente con la GROUP BY; M$SQL per esempio ti darebbe errore, visto che ID non è aggregato (come è max(DataIn) ) né è nella GROUP BY (come Val).

nel tuo caso devi usare una join/sub-query più o meno così

codice:
SELECT 
	t1.id, t2.val, t2.DataIn 
FROM 
	test t1 INNER JOIN
	(SELECT	val, MAX(DataIn) AS DataIn FROM test GROUP BY val) t2
	ON t1.val=t2.val AND t1.DataIn=t2.DataIn