Wenn Sie MySQL 8.0 ausführen, können Sie lag()
verwenden :
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
Wenn Sie nach einem bestimmten Datum filtern müssen, können Sie dies in einer äußeren Abfrage tun:
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'
Bitte beachten Sie das date
und rank
sind Namen von MySQL-Funktionen und daher keine gute Wahl für Spaltennamen. Ich habe die Spalten in der Abfrage umbenannt.