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