Om du kör MySQL 8.0 kan du använda 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
Om du behöver filtrera på ett visst datum kan du göra det i en yttre fråga:
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'
Observera att date
och rank
är namn på MySQL-funktioner, därför inte ett bra val för kolumnnamn. Jag döpte om kolumnerna i frågan.