I'm assuming player_id and date is a unique combination. Date isn't a good column name. I've assumed your tables names are player and result...in the future, give us table names so answers can include them instead of my guesses.
Building the query:
(select player_ID, max(date) from table group by player_ID)
That will select the maximum date for each player. We are going to use it as a subquery and inner join to it so it acts as a filter. Note that if the player_ID, date combination isn't unique, this will bring back multiple rows per player.
Select player, maxdate
from player p
inner join (select player_ID, max(date) as maxdate from result group by player_ID) a
on a.player_ID = p.player_ID
This will return to you a player and the most recent date. Join that back to the result table to get the result
Select player, result
from player p
inner join (select player_ID, max(date) as maxdate from result group by player_ID) a
on a.player_ID = p.player_ID
inner join result r on r.player_ID = a.player_ID and r.date = a.maxdate
Hopefully that makes sense as to the logic in creating the statement for you.