Als u MySQL 8.0 gebruikt, kunt u lag()
. gebruiken :
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
Als u op een bepaalde datum moet filteren, kunt u dit doen in een buitenste zoekopdracht:
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'
Houd er rekening mee dat date
en rank
zijn namen van MySQL-functies, dus geen goede keuze voor kolomnamen. Ik heb de kolommen in de zoekopdracht hernoemd.