Si vous utilisez MySQL 8.0, vous pouvez utiliser 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 vous avez besoin de filtrer sur une date donnée, vous pouvez le faire dans une requête externe :
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'
Veuillez noter que date
et rank
sont des noms de fonctions MySQL, donc pas un bon choix pour les noms de colonnes. J'ai renommé les colonnes de la requête.