Se você estiver executando o MySQL 8.0, você pode usar
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 você precisar filtrar em uma determinada data, poderá fazê-lo em uma consulta externa:
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'
Observe que
date
e rank
são nomes de funções do MySQL, portanto, não é uma boa escolha para nomes de colunas. Renomeei as colunas na consulta.