Si está ejecutando MySQL 8.0, puede 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
Si necesita filtrar en una fecha determinada, puede hacerlo en una 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'
Tenga en cuenta que date
y rank
son nombres de funciones de MySQL, por lo tanto, no es una buena opción para los nombres de columna. Cambié el nombre de las columnas en la consulta.