Se stai usando MySQL 8.0, puoi usare lag() :
select
dte,
country,
sport,
rnk,
lag(rnk) over(partition by country, sport order by dte) rnk_1,
lag(rnk) over(partition by country, sport order by dte) - rnk rank_diff
from mytable
Se devi filtrare in una data data, puoi farlo in una query esterna:
select *
from (
select
dte,
country,
sport,
rnk,
lag(rnk) over(partition by country, sport order by dte) rnk_1,
lag(rnk) over(partition by country, sport order by dte) - rnk rank_diff
from mytable
) t
where dte = '2000-01-31'
Tieni presente che date e rank sono nomi di funzioni MySQL, quindi non una buona scelta per i nomi di colonna. Ho rinominato le colonne nella query.