Hvis du kører MySQL 8.0, kan du bruge 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
Hvis du har brug for at filtrere på en given dato, kan du gøre det i en ydre forespørgsel:
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'
Bemærk venligst, at date
og rank
er navne på MySQL-funktioner, og derfor ikke et godt valg til kolonnenavne. Jeg omdøbte kolonnerne i forespørgslen.