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.